首页 > 其他分享 >connect()和close()的man手册

connect()和close()的man手册

时间:2022-10-29 23:03:46浏览次数:38  
标签:socket ai res send connect close man



  • 英文小册原文地址:​​beej.us/guide/bgnet…​​
  • 作者:Beej
  • 中文翻译地址:​​www.chanmufeng.com/posts/netwo…​​

connect()

将你本地的socket连接到服务器。

函数原型

#include <sys/types.h>
#include <sys/socket.h>

int connect(int sockfd, const struct sockaddr *serv_addr,
socklen_t addrlen);

说明

当你调用​​socket()​​​得到一个socket descriptor之后,你可以使用​​connect()​​​这个系统调用连接这个socket到远程服务器。你需要做的就是把socket descriptor和服务端地址传递给​​connect()​​。对了,还有地址的长度,也得通过参数的形式传递。

一般情况下,你可以通过调用​​getaddrinfo()​​​来获取这些信息,但是如果你非要手动装填​​struct sockaddr​​也不是不行。

如果你没有对socket descriptor调用​​bind()​​方法,它会和你的IP地址以及随机端口号进行绑定。

如果你不是Server端程序,这种自动机制是挺好的,因为你根本就不在乎你用的是啥端口号,你只需要在乎远程端口号是什么,并把它放在​​serv_addr​​​参数中就行了。如果你实在想绑定到某个特定IP地址和特定端口号上,你也可以用​​bind()​​函数进行设置,但属实没有必要。

一旦​​connect()​​​完成,你就可以随心所以地使用 ​​send()​​​ 和 ​​recv()​​处理数据了。

记住:如果你​​connect()​​​的是远程的 ​​SOCK_DGRAM​​​ UDP socket,只要你想, ​​send()​​​ 、 ​​recv()​​​和 ​​sendto()​​​ 、 ​​recvfrom()​​你都可以用。

返回值

成功返回​​0​​​,发生异常时返回​​-1​​​,并将 ​​errno​​ 设置为合适的值。

例子

// connect to www.example.com port 80 (http)

struct addrinfo hints, *res;
int sockfd;

// first, load up address structs with getaddrinfo():

memset(&hints, 0, sizeof hints);
hints.ai_family = AF_UNSPEC; // use IPv4 or IPv6, whichever
hints.ai_socktype = SOCK_STREAM;

// we could put "80" instead on "http" on the next line:
getaddrinfo("www.example.com", "http", &hints, &res);

// make a socket:

sockfd = socket(res->ai_family, res->ai_socktype, res->ai_protocol);

// connect it to the address and port we passed in to getaddrinfo():

connect(sockfd, res->ai_addr, res->ai_addrlen);

参阅

​​socket()​​, ​​bind()​​

close()

关闭socket descriptor。

函数原型

#include <unistd.h>

int close(int s);

说明

当你完成了对包含你无数奇思妙想的socket的使用,并且你不想再​​send()​​​或​​recv()​​​,又或者任何其他事情,你可以使用​​close()​​,socket将被永久释放。

远程主机可以通过以下两种方式判断你是否进行了​​close()​​。

  1. 如果远程主机调用了​​recv()​​,返回值会是0;
  2. 如果远程主机调用了​​send()​​​,它将会收到一个 ​​SIGPIPE​​​ 信号,并且​​send()​​​的返回值为​​-1​​​,​​errno​​​值也会被设置为 ​​EPIPE​​。

Windows使用者须知:

关闭的方法为​​closesocket()​​​,而不是​​close()​​​。如果你试图在socket descriptor上使用​​close()​​,Windows可能会跟你闹别扭。。。你会很苦恼。

返回值

成功返回​​0​​​,发生异常时返回​​-1​​​,并将 ​​errno​​ 设置为合适的值。

例子

s = socket(PF_INET, SOCK_DGRAM, 0);
.
.
.
// a whole lotta stuff...*BRRRONNNN!*
.
.
.
close(s); // not much to it, really.

参阅

​​socket()​​, ​​shutdown()​​

标签:socket,ai,res,send,connect,close,man
From: https://blog.51cto.com/u_13887950/5806584

相关文章

  • bind()函数的man手册
    英文小册原文地址:​​beej.us/guide/bgnet…​​作者:Beej中文翻译地址:​​www.chanmufeng.com/posts/netwo…​​将socket与IP地址和端口号关联。函数原型#include<sys/typ......
  • accept()的man手册
    英文小册原文地址:​​beej.us/guide/bgnet…​​作者:Beej中文翻译地址:​​www.chanmufeng.com/posts/netwo…​​接受侦听套接字上传入的连接。函数原型#include<sys/types......
  • Building a ASP.NET solution from command-line?从命令行构建 ASP.NET 解决方案?
    【问题标题】:BuildingaASP.NETsolutionfromcommand-line?从命令行构建ASP.NET解决方案?【发布时间】:2011-01-1406:43:06【问题描述】:如何从命令行构建ASP.NETWe......
  • python系列:paramiko中invoke_shell和exec_command的区别
    目录​​exec_command​​​​invoke_shell​​exec_command只能运行一次,命令执行完成后channel将关闭,不能被复用。invoke_shell使用get_pty()获取一个伪终端后,需要使用invo......
  • POSTMAN 使用时的一个坑
    在javaweb的日常开发工作中,别告诉我你还没有使用过类似postman这样的接口请求测试工具。我目前Mac开发平台使用最多的几个工具就是IntellijIDEA,postman,Chrome,Subli......
  • k3s+traefik+cert-manager+letsencrypt实现web服务全https
    1.简介随着HTTPS不断普及,越来越多的网站都在从HTTP升级到HTTPS,使用HTTPS就需要向权威机构申请证书,需要付出一定的成本,如果需求数量多,也是一笔不小的开支。cert-ma......
  • postman请求某接口可以得到数据,离开postman却获取不到数据?
    参考1: 未实际验证postman请求某接口可以得到数据,离开postman却获取不到数据?问题解决:十几行代码,配置一个代理服务器_竹箫云淡的博客-CSDN博客......
  • 问题定位记录1:Djano-redis库报错No connection available
    一、问题现象MANO(网络管理与编排软件)原子层创建资源后写redis缓存时报错Noconnectionavaiable堆栈打印:Traceback(mostrecentcalllast): File"/home/oes/.loca......
  • postman +腾讯电子签
      postman.setGlobalVariable("Timestamp",Date.parse(newDate())/1000);postman.setGlobalVariable("Nonce",Date.parse(newDate())/1000);//正式环境//......
  • Java™ Management Extensions Technology Stack
    JavaPlatform,StandardEditionJavaManagementExtensionsGuideJava™ManagementExtensionsInstrumentationandAgentSpecification,v1.2Java™ManagementEx......