我有一个套接字,在其中设置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上运行)。

08-27 11:59