如何停止read()函数?

时间:2011-12-11 02:21:43

标签: sockets udp

我在Linux上用C编写UDP客户端/服务器程序。问题是我必须添加连接检查功能。在linux手册页中,我找到了具有此功能的udp客户端示例(http://www.kernel.org/doc/man-pages/online/pages/man3/getaddrinfo.3.html)。它使用写/读函数来检查服务器响应。我试图将它应用到我的程序中,它看起来像这样:

char *test = "test";
nlen = strlen(test) + 1;
if (write(sock, test, nlen) != nlen) {              // socket with the connection
    fprintf(stderr, "partial/failed write\n");
    exit(EXIT_FAILURE);
}

nread = read(sock, buf, nlen);
if (nread == -1) {
    perror("Connection");
    exit(EXIT_FAILURE);
}

问题不是我在服务器打开时用这个位执行程序,除了读取输入无限时间外它什么也没做,它也没用。我尝试了kill(getpid(),SIGHUP)中断,我在这里找到了其他类似的主题,并关闭(sock,1),但似乎没有任何效果。您能否告诉我如何停止输入读取或任何其他可能的选项以检查udp服务器是否处于活动状态?

1 个答案:

答案 0 :(得分:1)

你应该使用异步阅读。

为此,您必须使用“sys / socket.h”中的select()函数。

该函数监视套接字描述符的变化而不会阻塞。

您可以在控制台中找到herehere的参考或“man select”。

Windows有一个示例here,但其用法与UNIX非常相似。