使用无限超时调用Select()



我想使用select调用从我的写套接字fd发送()数据。我将使用非阻塞套接字实现。哪个实现更好。

while(u4BytesSent < u2BufLen)
{
    i4RetVal = send(sockFd, au1Buf + u4BytesSent, (u2BufLen - u4BytesSent));
    if(i4RestVal == -1 && errno != EWOULDBLOCK)
    {
        break;
    }
    i4BytesSent = i4BytesSent + i4RetVal;   
}

如果发送缓冲区频繁满,这个代码会占用CPU吗?

选择无限超时呼叫。select()在占用CPU的情况下会有更好的性能吗?

如果发送缓冲区频繁满,这个代码会占用CPU吗?

是的。它也会表现不正确(很可能崩溃),因为它最终会在错误时反复将-1的错误返回值添加到i4BytesSent

使用select()与无限(或,至少,很长)超时应该工作良好。您的进程将休眠,直到套接字上的数据可用。

考虑到你所描述的,你最好不要使用非阻塞套接字。如果您要做的只是将它们包装在select()中以使写操作阻塞,那么当然没有意义!

最新更新