今天我在B站学习中科大的计算机网络这门课程, 对tcp的socket的bind感到困惑
比如这一段代码
// socket 函数返回的描述符
int serverSocket;
struct sockaddr_in server_addr;
if ((serverSocket = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
perror("socket");
// 连接失败
return 1;
}
if (bind(serverSocket, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {
perror("connect error");
return 1;
}
我不太能理解这里的bind有什么用, 在创建socket的时候不是已经返回socket的句柄了吗, 那么直接用就好了啊, 为什么还要bind一下? 如果不bind会怎么样? 还有操作系统内核维护的socket是在bind时期创建的还是在构造socket的时候创建的?
或者我想在这里说一下自己的想法: (以下是我的想法)
在socket(AF_INET, SOCK_STREAM, 0)
这里, 程序已经向操作系统申请了一个socket, 但是现在这个socket什么都没有, 没有源地址和端口也没有目标地址和端口, 在调用bind了后会绑定源地址和端口比如127.0.0.1:8080
, 也就是bind是用来绑定本机的ip和端口号的要不然socket就不知道从哪accpet客户端的连接
请问诸位, bind的含义到底是什么?
原文:'在调用bind了后会绑定源地址和端口比如127.0.0.1:8080, 也就是bind是用来绑定本机的ip和端口号的要不然socket就不知道从哪accpet客户端的连接' 这款就是意义呀,socket 句柄只是用来操作输入输出的字节数据的,至于从哪里输入往哪里输出你得告诉她吧,这就是 bind 做的事情