Linux 网络编程——socket 系统调用实现剖析
Linux 下多语言网络编程对比 还记得Linux网络编程姿势吗?如果不记得了,这里有一个用C语言写的tcp_echo服务,用这段代码能帮我们回忆Linux的网络编程套路: 调用socket创建一个网络套接字socket; 调用bind给socket绑定地址; listen设置 调用accept接收网络请求; #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <arpa/inet.h> #include <sys/socket.h> int main(void) { int sd = socket(AF_INET, SOCK_STREAM, 0); struct sockaddr_in addr = { .sin_family = AF_INET, .sin_port = htons(12345), .sin_addr.s_addr = INADDR_ANY, }; bind(sd, (struct sockaddr*)&addr, sizeof(addr)); listen(sd, 5); while (1) { int client = accept(sd, NULL, NULL); char buf[1024]; ssize_t n; while ((n = recv(client, buf, sizeof(buf), 0)) > 0) { send(client, buf, n, 0); // 把读到的内容发送回去 } close(client); } close(sd); return 0; } 如果你用的是Go、Python、Rust等高级编程语言,可能会对这段代码嗤之以鼻,这么简单一个功能,要创建一个可以通信的TCP连接完全不必这么复杂。 这是用Go写的,如果不考虑错误处理,只需要调用Listen和Accept。 ...