[問題 ] recvfrom不會block

作者: achicn3 (Sher)   2018-06-03 18:36:58
開發平台(Platform): (Ex: Win10, Linux, ...)
Ubuntu
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
GCC
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
No
問題(Question):
經過我測試,client的sendto()沒問題會正常送出 但問題就是我的Server端的
if((recvfrom(clientfd,buffer,bufferlen,0,(struct sockaddr*)&client,&size)==-1)
{
printf ("ERROR: Obtain new Socket Despcritor error.\n");
}
照理來說 這邊if應該要等client端的sendto()再往下繼續執行 可是我只要執行./server
會直接執行printf ("ERROR: Obtain new Socket Despcritor error.\n");這行
看起來像是recvfrom 沒有block
也有google過 找其他UDP範例 也是一樣的寫法 。
餵入的資料(Input):
client端輸入 server端的ip port
預期的正確結果(Expected Output):
Server端等待client連線後傳送一文字檔(.txt)給client
Client收到文字檔
錯誤結果(Wrong Output):
Server端在recvfrom 沒有block
程式碼(Code):(請善用置底文網頁, 記得排版,禁止使用圖檔)
補充說明(Supplement):
我自己有寫另一個tcp版本可以正常運作
換成UDP跟UDP的function 不知為何無法正常運作
作者: stupid0319 (徵女友)   2018-06-03 19:16:00
UDP= =udp怎麼會blockudp跟tcp沒差別的話,就不用分兩種模式了
作者: Schottky (順風相送)   2018-06-03 23:25:00
你可以用 select 去問有沒有東西可讀,select 可以設定成 block 到有東西可以讀或出事為止,再去 recvfrom()
作者: alex70266 (小眼)   2018-06-04 00:07:00
https://linux.die.net/man/2/recvfrom因為你沒有貼完整source code, 沒辦法隔空抓藥recvfrom return 出去的時候把errno印出來看recvfrom當然可以blocked阿
作者: Schottky (順風相送)   2018-06-04 02:04:00
恭喜你進入最難的部份了。
作者: Jockey66666 (往事已成追憶)   2018-06-04 09:08:00
udp跟能不能block有什麼關係..不要誤導
作者: Bencrie   2018-06-04 10:07:00
我還以為 block 是 ioctl 在控制 der

Links booklink

Contact Us: admin [ a t ] ucptt.com