我正在尝试使用TCP和标准的socket.h库在linux上实现一个简单的客户端/服务器程序.服务器处理多个客户端,每个客户端可以随时关闭()或关闭()套接字.
在服务器端(使用非阻塞读取):
int nBytes;
if ((nBytes = recv(socket, buffer, BUFFER_SIZE, MSG_DONTWAIT)) == -1)
{
if (errno != EAGAIN && errno != EWOULDBLOCK)
{
//print to log
}
}
if (nBytes == 0)
{
//other side closed the connection
}
Run Code Online (Sandbox Code Playgroud)
我得到recv()返回-1并将错误设置为ECONNRESET.如果客户端已关闭,连接不应该recv()返回0?
原因很多,包括但不限于:
这是致命错误,您应该在获得它时关闭套接字.
每个客户端可以
close()或者shutdown()套接字他想要的任何时间.
不,他不能.往上看.
| 归档时间: |
|
| 查看次数: |
3394 次 |
| 最近记录: |