TCP连接建立相关问题



我正在阅读这段代码,对此有几个问题:

  1. 创建与主机和端口的TCP连接时,成功时应返回文件描述符,错误时应返回-1。但到目前为止,我只能看到它在connect (s, (struct sockaddr *) &sa, sizeof (sa)) < 0时返回-1,它在哪里显示它在成功时返回文件描述符
  2. connect (s, (struct sockaddr *) &sa, sizeof (sa)) < 0<0在这里是什么意思
  3. 哪一个是读取请求的功能?如果没有,你能给我提供一些好的代码示例吗
int tcpconnect (char *host, int port){
struct hostent *h;
struct sockaddr_in sa;
int s;
/* Get the address of the host at which to finger from the
* hostname. */
h = gethostbyname (host);
if (!h || h->h_length != sizeof (struct in_addr)) {
fprintf (stderr, "%s: no such hostn", host);
return -1;
}
/* Create a TCP socket. */
s = socket (AF_INET, SOCK_STREAM, 0);
bzero (&sa, sizeof (sa));
sa.sin_family = AF_INET;
sa.sin_port = htons (0); /* tells OS to choose a port */
sa.sin_addr.s_addr = htonl (INADDR_ANY); /* tells OS to choose IP addr */

if (bind (s, (struct sockaddr *) &sa, sizeof (sa)) < 0) {
perror ("bind");
close (s);
return -1;
}
sa.sin_port = htons (port);
sa.sin_addr = *(struct in_addr *) h->h_addr;


/* And connect to the server */
if (connect (s, (struct sockaddr *) &sa, sizeof (sa)) < 0) {
perror (host);
close (s);
return -1;
}
return s;
}

创建与主机和端口的TCP连接时,成功时应返回文件描述符,错误时应返回-1。但到目前为止,我只能看到它在connect (s, (struct sockaddr *) &sa, sizeof (sa)) < 0时返回-1,它在哪里显示它在成功时返回文件描述符?

s = socket(...)创建实际的文件描述符,如果没有任何问题,则return s;将该文件描述符返回给tcpconnect()的调用方。如果出现任何错误,代码将释放带有close(s)的文件描述符,然后将-1返回给调用者。

connect (s, (struct sockaddr *) &sa, sizeof (sa)) < 0<0在这里是什么意思?

connect()成功时返回0,失败时返回负数。该代码只是检查connect()是否失败。与bind()相同(应该socket()相同(。

读取请求的功能是什么?

显示的代码中没有任何内容正在读取请求。在tcpconnect()向调用方返回有效的文件描述符之后,这种情况会在该代码之外发生。

最新更新