[英]what's the host port number when we use accept() and connect() in C socket programming
《 Beej网络编程指南》解释了accept()如下:
即将发生的事情是:遥远的某人将尝试在您正在侦听()的端口上将connect()连接到您的计算机。 他们的连接将排队等待被接受。 您调用accept(),并告诉它获取挂起的连接。 它会返回给您一个全新的套接字文件描述符 ,用于此单个连接!
但是我们如何知道“全新插座”的端口号?
从GNU文档接受。
newfd = accept (sockfd, (struct sockaddr *) &clientname, &size);
if (newfd < 0) {
perror ("accept");
exit (EXIT_FAILURE);
}
在接受sockaddr.in结构中,找到本地端口。
fprintf (stderr, "Server: connect from host %s, port %hd.\n",
inet_ntoa (clientname.sin_addr),
ntohs (clientname.sin_port));
它不会分配新的端口。 接受的套接字使用与侦听套接字相同的端口。
将接受的SOCKET
传递到getsockname()
以获取其本地IP /端口,并传递到getpeername()
以获取其远程IP /端口。
我认为getpeername将返回此信息
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.