我在写一个客户端和服务器通过udp通信的测试程序,在客户端遇到了问题: 客户端首先是sendto向服务器端发送数据,然后用recvfrom接收,问题是在发送数据完成后,本来我想recvfrom应该阻塞等待服务器的应答数据的,但是到了recvfrom函数就是直接返回了-1,而且错误是 WSAECONNRESET,socket在创建的时候默认的阻塞的,请问这里为什么没有阻塞

解决方案 »

  1.   

    win32 的这些API都不是阻塞的,需要循环检查或用select模型
      

  2.   

    楼上的:不是你说的这样吧,socket在创建的时候默认不都是阻塞的吗
      

  3.   

    那好象是说的accept函数吧,它的确是阻塞的,有客户端连接时它才返回,其他的像recv,recvfrom,send,sendto等都是非阻塞的,MSDN应该说的很详细
      

  4.   

    不是吧 我在服务器端先bind了个端口,然后用recvfrom函数接收客户端发来的数据,我调试发现这种情况recvfrom就是阻塞的,但是客户端只是先sendto,发送数据后socket应该已经绑定了某个端口,那么再recvfrom,应该也是阻塞的,因为是默认情况啊,为什么就没阻塞就返回了呢?
      

  5.   

    我的程序的流程就是这样: 
    初始化socket 成功
    sendto       可以发送出去
    recvfrom     错误,返回-1,正确应该返回0或者接收到数据哪位指导一下啊
      

  6.   

    1楼真TM睁眼说瞎话。If no incoming data is available at the socket, the recvfrom function blocks and waits for data to arrive according to the blocking rules defined for WSARecv with the MSG_PARTIAL flag not set unless the socket is nonblocking
    MSDN的原话