通用结构体:

struct sockaddr {
    sa_family_t sa_family; // unsigned short 指定了通信协议家族
    char sa_data[14];
}

IPV4网络通信地址结构体:

struct sockaddr_in {
    sa_family_t sin_family;
    in_port_t   sin_port;
    struct in_addr{
        unsigned int s_addr;
    }sin_addr;    
}

UNIX本体通信地址结构体:

struct sockaddr_un {
    sa_family_t sun_family;
    char        sun_path[UNX_PATH_MAX];
}
  • socket
int socket(int domain, int type, int protocl)
功能:打开一个套接字,并返回一个相关的文件描述符
返回值:
    成功: 一个新的文件描述符
    失败: -1
参数:
    int domain: 通信域
        AF_INET|AF_INET6| AF_UNIX|AF_PACKET
    int type:套接字类型
        SOCK_STREAM  流式套接字
        SOCK_DGRAM   数据报套接字
        SOCK_RAW     原始套接字
    int protocl:协议(在原始套接字中根据需要选择使用,流式或数据报套接字中为0)
  • bind
int bind(int sockfd, const struct sockaddr *addr, socklen_t addrelen);
功能:为一个打开的套接字,保定一个地址(IP+PORT)
返回值:
    成功: 0
    失败: -1
参数:
    int sockfd:通过socket 打开并返回的文件描述符
    const struct sockaddr * addr:通用结构体地址,更具通信域选择相关的地址格式
    socklen_t addrlen:实际地址结构体的大小
  • listen
int listen(int sockfd, int backlog)
功能:将一个经过bind的套接字置为被动状态,以便来使用accept接收新的请求
返回值:
成功: 0
失败: -1
参数:
int sockfd: 通过socket创建,并通过bind后的套接字描述符
int backlog:握手请求队列的最大值
  • accept
int accept(int sockfd,struct sockaddr* addr socklen_t addrlen)
功能:接收一个握手请求,并返回一个新的文件描述符
返回值:
成功:新的文件描述符(用来收发数据的通道)
失败:-1
参数:
int sockfd:经过socket创建,bind后并且listen后的文件描述符
sturct sockaddr *addr:用来待会握手请求方的地址结构体
socklen_t addrlen:期望接收的对方的地址大小,该值会被修改为实际大小,调用者需要提前初始化
  • sendto
int sendto(int sockfd,void *buff, size_t size, int flag,const sockaddr *addr, socklen_t addrlen)
功能:向一个指定的目标主机发送数据包
返回值:
    成功:实际发送的字节数
    失败:-1
参数:
    int sockfd:通过socket打开并返回的文件描述符
    void *buff:即将发送的数据
    size_t size:数据大小
    int flag:发送标志位(阻塞,非阻塞等,如果无特殊要求则设置为0)
    const struct sockaddr * addr:目标主机的地址结构体(IP+PORT)
    socklen_t addrlen:目标主机结构体大小
  • recvfrom
int recvfrom(int sockfd, void *buff, size_t size,int flag,struct sockaddr *addr, socklen_t *addrlen)
功能:接受一个数据包,并待会数据报的来源地址
返回值:
    成功:实际接收的字节数
    失败:-1
    对方关闭:0
参数:
    int sockfd:通过socket打开并返回的文件描述符
    void *buff: 接受数据的缓存区
    size_t size: 缓冲区大小
    int flag: 接收标志位(阻塞、非阻塞等,如果无特殊要求则设置为0)
    struct sockaddr *addr:用来保存数据来源主机的地址结构体(IP+PORT)
    socklen_t *addrlen:期望接收的数据源主机的地址结构体大小(在使用前由用户自己初始化),一旦该函数调用结束,该变量会被改为实际大小
  • select
int select(int nfds, fd_set *rdfds, fd_set *wrfds, fdset *exceptfds, struct timeval *timeval)
功能:在多路IO复用模型中,负责
返回值:
    成功:资源个数
    失败:-1
参数:

results matching ""

    No results matching ""