bind()
bind()函数把一个地址族中的特定地址赋给socket。例如对应AF_INET、AF_INET6就是把一个ipv4或ipv6地址和端口号组合赋给socket。
int
WSAAPI
bind(
_In_ SOCKET s,
_In_reads_bytes_(namelen) const struct sockaddr FAR * name,
_In_ int namelen
);
socket s 就是socket描述字;
const struct sockaddr FAR * name 是一个结构体的指针,用于描述绑定在socket上的IP内容;
namelen是对应的是地址的长度。
通常服务器在启动的时候都会绑定一个众所周知的地址(如ip地址+端口号),用于提供服务,客户就可以通过它来接连服务器;而客户端就不用指定,有系统自动分配一个端口号和自身的ip地址组合。这就是为什么通常服务器端在listen之前会调用bind(),而客户端就不会调用,而是在connect()时由系统随机生成一个。
socket()、bind()函数分别建立了网络接口并将对应的IP、端口地址进行了绑定,然后需要运用listen()函数与connect()函数进行连接。
int listen(int sockfd, int backlog);
int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
int
WSAAPI
listen(
_In_ SOCKET s,
_In_ int backlog
);
int
WSAAPI
connect(
_In_ SOCKET s,
_In_reads_bytes_(namelen) const struct sockaddr FAR * name,
_In_ int namelen
);
listen专门针对socket进行监听,后续的数字代表可以排队的个数。
connect是将现有的插头与对应IP进行连接的操作,最后的namelen就是地址的长度。
bind()函数用于将IP地址和端口号绑定到socket上,常在服务器启动时使用。服务器通过bind()指定服务地址,然后listen()开始监听连接请求,backlog参数设定等待队列长度。客户端则在connect()时由系统分配端口号并尝试连接服务器的已知地址。
2122

被折叠的 条评论
为什么被折叠?



