select和send的问题
使用select主要是为了避免阻塞,比如对于一个TCP连接,缓冲区满了,再send时就阻塞住了,如果对方由于某种原因一直没有recv的话,send方也就死了。
所以通常可以
if (select(n, NULL, &fs_w, NULL, &tv) > 0)
{
if (FD_ISSET(fd, &fs_w))
send(fd, buf, len);
}
但会不会有这样的情况:缓冲区没充满,但只有少量的空间了,例如只剩下 100 BYTE的空间。这时select返回是可写的,但send(fd,buf, 200),写了200字节,其中100写进去了,另100字节写不进去,被阻塞了。
会不会有这样的情况呢?