我试图实现一个简单的即时消息服务器并提出以下问题:
如何可靠地检查消息是否已到达另一个端点? (我知道有确认包但我不知道以正确的方式实现它。)
示例代码:
客户端:
/* connect and stuff... */
connect(serverFD, ...)
write(serverFD, "hello there!, 13);
/* Give the server a little time */
sleep(1);
/* Close the socket, simulate connection lost scenario */
shutdown(serverFD, SHUT_RDWR);
服务器:
clientFD = accept(masterSocket, NULL, NULL);
/* Read a package */
{
char buf[20];
ssize_t buflen = read(clientFD, buf, sizeof(buf));
fprintf(stderr, "%zd bytes read: %s\n", buf);
/* Wait 2 seconds */
sleep(2);
/* Send a message to the closed endpoint */
// NO SIGPIPE signal!
write(clientFD, "hello!", 7);
}
问题是服务器如何知道邮件是否已发送? write
根本不会返回任何错误。
编辑我知道有关此here的类似问题,但没有关于确认数据包的解释。