socket 的 bind 具体作用是什么?
今天我在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的含义到底是什么?
回复
1个回答

test
2024-07-17
原文:'在调用bind了后会绑定源地址和端口比如127.0.0.1:8080, 也就是bind是用来绑定本机的ip和端口号的要不然socket就不知道从哪accpet客户端的连接' 这款就是意义呀,socket 句柄只是用来操作输入输出的字节数据的,至于从哪里输入往哪里输出你得告诉她吧,这就是 bind 做的事情
回复

适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容