前面我们已经说了, 套接字也创建了, “地方”也定义了,下面就需要将socket放置在这个“地方”(TCP),将他们紧紧地捆绑在一起,用bind函数吧, 我们来看看函数原型:
int PASCAL FAR bind (SOCKET s, const struct sockaddr FAR *addr, int namelen);
第一个参数当然是待绑定的套接字啦,第二个参数是标识绑定在哪个“地方”, 第三个参数是这个“地方”的占地大小。
返回值表示绑定操作是否成功,0表示成功, -1表示不成功。函数的返回值千万不要忽视,上次就被人说了。
一般是这么调用的:
iRet = bind(sockSrv,(SOCKADDR*)&addrSrv, sizeof(SOCKADDR)); // 注意强制转换
我们来对比一下文件I/O操作和网络I/O操作: 打开一个文件后, 便可以对文件进行读写操作了, 但是, 网络I/O实际上有三个步骤来完成这个功能:
1. 打开/创建socket
2. 命名socket, 我们知道, socket名称包含"协议, ip地址, 端口号"这三个要素, 而命名就是通过调用bind函数把socket与这三个要素绑定一起来。
3. 建立连接