[问题 ] 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