@
miterleo socket 程序通讯通常分几个阶段, tcp 的程序比 udp 程序稍微复杂一点, tcp server 通过 bind listen accept 三个步骤。而*:*则产生在第一个和第二个步骤,即 bind 和 listen 阶段,第一个*产生于 bind 函数,而第二个*则产生于 listen 函数。对于服务器,第二个*实际上是 0 端口,(在 unix 网络编程卷 1 )中看到。而在 udp 程序中,通过测试(测试环境为 mac osx 10.11.6 ),一旦通过 socket 函数创建套接字后,这个通配地址就已经生成。
测试代码:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <string.h>
#include <errno.h>
#include <netinet/in.h>
#include <unistd.h>
#include <arpa/inet.h>
int main( int argc, char **argv )
{
int sockfd;
struct sockaddr_in servaddr;
if ( (sockfd = socket(AF_INET, SOCK_DGRAM, 0))<0 ) {
fprintf( stderr, "socket:%s\n", strerror(errno));
exit(EXIT_FAILURE);
}
int nread;
char buf[BUFSIZ];
while((nread = read(0, buf, BUFSIZ))>0)
{
}
return 0;
}