我有一个套接字,在其中设置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
是否会超时。 最佳答案
不,套接字不会超时,因为MSG_DONTWAIT
将导致recv()
立即返回。请注意,如果您将超时设置为1毫秒,则可能会超时-这取决于实现(您的代码在哪个OS上运行)。