热门话题

Php 研究室

Linux Socket函数简明参考(2)    作者:xieaotian发表于2010-02-07 10:46:10

	   

6. getsockopt(取得socket状态)
相关函数 setsockopt

表头文件 #include
#include

定义函数 int getsockopt(int s,int level,int optname,void* optval,socklen_t* optlen);

函数说明 getsockopt()会将参数s所指定的socket状态返回。参数optname代表欲取得何种选项状态,而参数optval则指向欲保存结果的内存地址,参数optlen则为该空间的大小。参数level、optname请参考setsockopt()。

返回值 成功则返回0,若有错误则返回-1,错误原因存于errno

错误代码

* EBADF 参数s 并非合法的socket处理代码[*]ENOTSOCK 参数s为一文件描述词,非socket[*]ENOPROTOOPT 参数optname指定的选项不正确[*]EFAULT 参数optval指针指向无法存取的内存空间


范例
Cpp代码

1. #include
2. #include
3. main()
4. {
5. int s,optval,optlen = sizeof(int);
6. if((s = socket(AF_INET,SOCK_STREAM,0))<0)
7. perror(“socket”);
8. getsockopt(s,SOL_SOCKET,SO_TYPE,&optval,&optlen);
9. printf(“optval = %d\n”,optval);
10. close(s);
11. }

#include #include main() { int s,optval,optlen = sizeof(int); if((s = socket(AF_INET,SOCK_STREAM,0))<0) perror(“socket”); getsockopt(s,SOL_SOCKET,SO_TYPE,&optval,&optlen); printf(“optval = %d\n”,optval); close(s); }


执行 optval = 1 /*SOCK_STREAM的定义正是此值*/





7. htonl(将32位主机字符顺序转换成网络字符顺序)
相关函数 htons,ntohl,ntohs

表头文件 #include

定义函数 unsigned long int htonl(unsigned long int hostlong);

函数说明 htonl()用来将参数指定的32位hostlong 转换成网络字符顺序。

返回值 返回对应的网络字符顺序。

范例 参考getservbyport()或connect()。





8. htons(将16位主机字符顺序转换成网络字符顺序)
相关函数 htonl,ntohl,ntohs

表头文件 #include

定义函数 unsigned short int htons(unsigned short int hostshort);

函数说明 htons()用来将参数指定的16位hostshort转换成网络字符顺序。

返回值 返回对应的网络字符顺序。

范例 参考connect()。





9. inet_addr(将网络地址转成二进制的数字)
相关函数 inet_aton,inet_ntoa

表头文件 #include
#include
#include

定义函数 unsigned long int inet_addr(const char *cp);

函数说明 inet_addr()用来将参数cp所指的网络地址字符串转换成网络所使用的二进制数字。网络地址字符串是以数字和点组成的字符串,例如:“163.13.132.68”。

返回值 成功则返回对应的网络二进制的数字,失败返回-1。





10. inet_aton(将网络地址转成网络二进制的数字)
相关函数 inet_addr,inet_ntoa

表头文件 #include
#include
#include

定义函数 int inet_aton(const char * cp,struct in_addr *inp);

函数说明 inet_aton()用来将参数cp所指的网络地址字符串转换成网络使用的二进制的数字,然后存于参数inp所指的in_addr结构中。
结构in_addr定义如下
Cpp代码

1. struct in_addr
2. {
3. unsigned long int s_addr;
4. };

struct in_addr { unsigned long int s_addr; };



返回值 成功则返回非0值,失败则返回0。





11. inet_ntoa(将网络二进制的数字转换成网络地址)
相关函数 inet_addr,inet_aton

表头文件 #include
#include
#include

定义函数 char * inet_ntoa(struct in_addr in);

函数说明 inet_ntoa()用来将参数in所指的网络二进制的数字转换成网络地址,然后将指向此网络地址字符串的指针返回。

返回值 成功则返回字符串指针,失败则返回NULL。

回复主题
Copyright © 2008-2010 版权所属:中国Python联盟 www.okpython.com
京ICP备08012290号 村长QQ:81356625 E-mail:xieaotian@163.com