我有一个套接字,我为recv()
设置了超时。
recv()
有两个步骤,首先,如果使用MSG_PEEK | MSG_DONTWAIT
完成,我会检查已接收数据的内容。
recvTimeout.tv_sec = mRecvTimeoutSecs;
recvTimeout.tv_usec = mRecvTimeoutUSecs;
sendTimeout.tv_sec = mSendTimeoutSecs;
sendTimeout.tv_usec = mSendTimeoutUSecs;
result = enableSocketOption(SOL_SOCKET, SO_RCVTIMEO, &recvTimeout, sizeof(recvTimeout));
peekdLen = ::recv(mSocket, peekDataBuffer, MAX_RECV_LENGTH, MSG_PEEK | MSG_DONTWAIT);
如果我使用recv()
,我只是想MSG_PEEK | MSG_DONTWAIT
是否会超时。
答案 0 :(得分:1)
不,套接字不会超时,因为MSG_DONTWAIT
会导致recv()
立即返回。请注意,如果设置为1毫秒超时,则可能会超时 - 这取决于实现(运行代码的操作系统)。