您的当前位置:首页正文

socket 相关函数

2023-03-10 来源:步旅网
socket 相关函数

c language 2009-08-02 16:36:51 阅读54 评论0 字号:大中小 int accept(int s,struct sockaddr *addr,int *addrlen);

用来接受参数s的socket 连线.参数s的socket必需先经bind()、listen()函数处理过,当有边线进来时accept()会返回一个新的socket处理代码,往后的数据传送与读取就是经由新的socket处理,而原来参数s的socket 能继续使用accept()来接受新的连线要求。连线成功时,参数addr所指的结构会被系统填入远程主机的地址数据,参数addrlen为sockaddr的结构长度。

成功返回新的socket 处理代码,失败返回-1,错误原因存于errno中。 int bind(int sockfd,struct sockaddr *my_addr,int addrlen);

设置给参数sockfd的socket一个名称。此名称由参数my_addr指向一sockaddr结构,对于不同的socket domain定义了一个通用的数据结构。 struct sockaddr {

unsigned short int sa_family; char sa_data[14]; };

sa_family 为调用socket()时的domain参数,即AF_xxxx值。 sa_data 最多使用14个字符长度。

此sockaddr结构会因使用不同的socket domain而有不同结构定义, 使用AF_INET domain, 其sockaddr结构定义便为: struct socketaddr_in {

unsigned short int sin_family; uint16_t sin_port;

struct in_addr sin_addr; unsigned char sin_zero[8]; };

strcut in_addr {

uint32_t s_addr; };

sin_family 即为sa_family. sin_port 为使用的port 编号 sin_addr.s_addr 为IP地址 sin_zero未使用

参数addrlen为sockaddr的结构长度。 成功则返回0,失败返回-1,错误原因于errno中。 int connet(int sockfd,struct sockaddr *serv_addr,int addrlen);

用来将参数sockfd的socket连至参数serv_addr指定的网络地址. void endprotoent(void);

用来关闭由getprotoent()所打开的文件。 无返回值。

struct hostent *gethostbyaddr(const char *addr,int len,int type);

返回一个hostent结构,参数addr可以为IPv4或IPv6的IP地址,参数len为参数addr的长度,参数type为AF_INET。

成功返回hostent结构指针,若有错误则返回NULL指针,错误原因则存于h_errno变量。 #include

struct hostent *gethostbyname(const char *name);

返回一个hostent结构,参数name可以为一个主机名称或IPv4/IPvs6的IP地址。hostent结构如下: struct hostent {

char *h_name; char **h_aliases; int h_addrtype; int h_length;

char ** h_addr_list; };

h_name 正式的主机名称

h_aliases 指向主机名称的其他别名

h_addrtype 地址的型态,通常是AF_INET h_length 地址的长度。

h_addr_list 从域名服务器取得该主机的所有地址。

成功返回hostent结构指针,错误返回NULL指针。 错误原因存于h_errno变量。 struct protoent *getprotobyname(const char *name);

返回一个protoent结构,参数name为欲查询的网络协议名称。此函数会从/etc/protocols中查找符合条件的数据并由结构protoent 返回。 成功返回protoent结构指针,有错误或找不到符合的数据则返回NULL指针。

因篇幅问题不能全部显示,请点此查看更多更全内容