2011年5月18日星期三

  Linux套接字2

1、int socket(int domain,int type,int protocol)

domain:设置为“AF_INET”

type:靠诉内核这个socket是什么类型,“SOCK_STREAM”或“SOCK_DGRAM”.

protocol:设置为0

返回:套接字描述符,或-1(错误时)。

2、int bind(int sockfd,struct sockaddr *my_addr,int addrlen);

用于指定一个套接字使用的端口

sockfd:由socket()函数返回的套接字描述符。

my_addr :一个指向struct sockaddr的指针,包含有关你的地址的信息:名称,端口 和IP地址。

addrlen: sizeof(struct sockaddr)

返回:执行成功返回0,错误返回-1

3、int connect(int sockfd,struct sockaddr *serv_addr, int addrlen)

sockfd:由socket()函数返回的套接字描述符。

serv_addr: 存储远端服务器的IP地址和端口信息的结构。

addrlen: sizeof(struct sockaddr)

返回:执行成功返回0,错误返回-1

4、int listen(int sockfd,int backlog)

sockfd:由socket()函数返回的套接字描述符。

backlog: 可容纳的未经处理的连接请求队列的数目。

             每一个连入请求都要进入一个连入请求队列,等待listen的程序调用accept()函数来接受

             这个连接。当系统还没有调用accept()时,如果有很多连拉发,那么本地能够等待的

             最大数目就是backlog,推荐值为5到10.

返回:执行成功返回0,错误返回-1。

5、int accept(int sockfd,void *addr,int *addrlen)

sockfd: 正在listen()的一个套接字描述符,由socket函数产生。

addr: 指向存储远程连接过来的计算机的IP地址和端口信息的结构。

addrlen:与以上函数不同,addrlen是指针变量,指向sizeof(struct sockaddr)函数的返回变量。

返回:执行成功,返回新的套接字描述符,用于进行send()和recv().

        执行失败,返回-1.

6、int send(int sockfd,const void *msg,int len,int flags)

sockfd: 代表与远程程序连接的套接字描述符

msg:指向发送的信息的首地址。

len: 发送信息的长度。

flags: 发送标记,一般设为0.

返回:执行成功,返回实际发送信息的长度。

         执行失败,返回-1

注:send()所发送的数据可能少于你给它的参数所指定的长度。

      如果给send()的参数中包含的数据长度大于send()所能一次发送的数据,则send()函数

      只发送它所能发送的最大数据长度,然后它相信程序员会把剩下的数据再次调用它来进行

      第二次发送。

7、int recv(int sockfd,void *buf,int len,unsigned int flags)

sockfd:你要读取数据的套接字描述符。

buf:指针,指向你能存储数据的内存缓存区

len:缓存区的最大尺寸。

flags:recv()函数的一个标志,一般为0.

返回:执行成功,返回实际接收数据的长度。

         执行失入,返回-1.

8、int sendto(int sockfd,const void *msg, int len,unsigned int flags,

                    const struct sockaddr *to,int tolen)

sockfd: 代表与远程程序连接的套接字描述符

msg:指向发送的信息的首地址。

len: 发送信息的长度。

flags: 发送标记,一般设为0.

to:指向struct sockaddr结构的指针,包括远程计算机的IP地址和端口信息。

tolen:sizeof(struct sockaddr)

9、int recvfrom(int sockfd, void *buf, int len, unsigned int flags,

                       struct sockaddr *from,int *fromlen)

sockfd:你要读取数据的套接字描述符。

buf:指针,指向你能存储数据的内存缓存区

len:缓存区的最大尺寸。

flags:recv()函数的一个标志,一般为0.

from :指向struct sockaddr结构的指针,指向发送端的的IP地址和端口信息。

如果设为NULL,不储存发送端地址。

fromlen:与以上函数不同,fromlen是指针变量,指向sizeof(struct sockaddr)函数的返回变量。

注:可以用connet()连接到一个数据报套接字的服务器程序上,那么可以使用send()和recv(),

      它们会自动加上目标地址,目标端口的信息。

10、close()和shutdown()

关闭某个套接字描述符所表示的连接,可用标准的关闭文件函数close(sockfd);

或者使用 int shutdown(sockfd,how);

how: 0表示不允许以后数据的接收操作。

        1表示不允许以后数据的发送操作。

        2表示不充许以后数据的任何操作,作用同 close(sockfd).

11、setsockopt()和getsockopt()

获取或者设置与某个套接字关联的选 项。选项可能存在于多层协议中,它们总会出现在最上面的套接字层。当操作套接字选项时,选项位于的层和选项的名称必须给出。为了操作套接字层的选项,应该 将层的值指定为SOL_SOCKET。为了操作其它层的选项,控制选项的合适协议号必须给出。例如,为了表示一个选项由TCP协议解析,层应该设定为协议号TCP。

int getsockopt(int sock, int level, int optname, void *optval, socklen_t *optlen);

int setsockopt(int sock, int level, int optname, const void *optval, socklen_t optlen);

sock:将要被设置或者获取选项的套接字。
level:选项所在的协议层。
optname:需要访问的选项名。
optval:对于getsockopt(),指向返回选项值的缓冲。对于setsockopt(),指向包含新选项值的缓冲。
optlen:对于getsockopt(),作为入口参数时,选项值的最大长度。作为出口参数时,选项值的实际长度。对于setsockopt(),现选项的长度

返回说明:  
成功执行时,返回0。失败返回-1,errno被设为以下的某个值  
EBADF:sock不是有效的文件描述词
EFAULT:optval指向的内存并非有效的进程空间
EINVAL:在调用setsockopt()时,optlen无效
ENOPROTOOPT:指定的协议层不能识别选项
ENOTSOCK:sock描述的不是套接字

12、int getpeername(int sockfd,struct sockaddr *addr,int *addrln)

获取一个已连接上的套接字的远程计算机的信息(如IP地址和端口)

sockfd:已连接的套接字描述符

addr: 指向struct sockaddr 的指针

addrlen: 指向struct sockaddr 长度的指针。

返回: 执行成功,返回0

          执行失败,返因-1

13、int gethostname(char *hostname,size_t size)

获取本地主机的信息

hostname:一个指向字符数组的指针,当函数返回时,它里面的数据就是本地的主机名字。

size: 是hostname指向的数组的长度。

返回: 执行成功,返回0

          执行失败,返因-1,全局变量 errno 中存储着错误代码。

没有评论:

发表评论