socket网络编程用到的函数

#include <sys/types.h>

#include <sys/socket.h>

1、创建套接字

int socket(int domain,int type,int protocol);

domain:AF_INET/AF_INET6/AF_UNIX

type:SOCK_STREAM(流式协议,默认是tcp)/SOCK_DGRAM(报式协议,默认是udp)

protocol:传0表示使用默认协议,即tcp,,,,udp..

成功:返回创建的文件描述符,失败返回-1,errno查看具体错误

 if(fd < 0)
 {
      if((errno == EINTR) || (errno == EAGAIN))
         {
                printf("*********");
                return -1;
         }
}         

socket相当于普通文件的open函数

2、int bind(int sockfd,const struct sockaddr *addr, socklen_t addrlen);

addrlen是addr的大小

成功:返回创建的文件描述符,失败返回-1,errno查看具体错误

3、listen//用来指定同时允许多少个客户端建立连接,即处于tcp三次握手过程的客户端数

int listen(int sockfd,int backlog);

backlog:排队建立3次握手队列和刚刚建立3次握手队列的链接和数

成功返回0,失败返回-1

4、accept//

int accept(int sockfd,struct sockaddr *addr,socklen_t *addrlen);

addr:返回链接客户端地址信息,传出参数,不需要初始化。

addrlen:是个传入传出参数

成功返回一个的socket文件描述符,用于和客户端通信,失败返回-1,设置errno

即返回的这个文件描述符才是与客户端成对存在的那个socket

5、connect

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

成功:返回创建的文件描述符,失败返回-1,errno查看具体错误

注意:上图中,accept在没有客户端连接的时候,会发生阻塞,select() 函数则不会阻塞。

另外,客户端也可以调用bind()函数,绑定自己的ip和端口号,但是这个不是必须的。默认不写的话,会给其自动分配。

最后要close是因为,socket也是个文件,open之后要进行关闭。

发布了100 篇原创文章 · 获赞 26 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/modi000/article/details/105398518