winsock2 bind函数的功能

int bind( __in SOCKET s, __in const struct sockaddr* name, __in int namelen );

bind函数只能用于还没有连接的socket,即只能在connect或者listen之前调用
一个socket只能调用一次bind
所以socket一旦bind就不能在改变了.

bind函数可以用于TCP和UDP

一个socket的名字由地址族,主机地址,标识应用程序的端口号组成
socket函数指定一个地址族,bind函数则指定地址跟端口号

传入的sockaddr中的sin_addr用于指定bind的地址,选择ADDR_ANY让socket bind到任何本机地址
这适合于多个网卡,或者多个ip地址的主机

传入的sockaddr中的port指定bind的端口,如果port为零,则系统会随机赋予1024到5000的端口号.
不推荐客户端使用具体的端口号进行bind,因为可能会跟其它应用程序冲突

对于具体的socket,当bind执行成功后还可以通过getsockname得到与socket相关联的地址
但是如果bind时使用的地址是ADDR_ANY,则只能在socket接收到连接时,才能获得该地址

你可能感兴趣的:(socket,struct,tcp)