可靠检查tcp数据包是否已交付

时间:2014-10-24 20:00:43

标签: c sockets tcp packet

我试图实现一个简单的即时消息服务器并提出以下问题:

如何可靠地检查消息是否已到达另一个端点? (我知道有确认包但我不知道以正确的方式实现它。)

示例代码:

客户端:

/* 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的类似问题,但没有关于确认数据包的解释。

0 个答案:

没有答案