C语言基础-网络相关函数

一、相关函数

函数 描述
int socket(int family, int type, int protocol); 位于:<sys/socket.h>;
功能:创建一个网络套接字 ;
返回:成功返回一个非负数的描述符,出错返回-1。
int bind(int sockfd, const struct sockaddr *myaddr, socklen_t addrlen); 位于:<sys/socket.h>;
功能:把一个本地协议地址赋予一个套接字;
返回:成功返回0,出错返回-1。
int listen(int sockfd, int backlog); 位于:<sys/socket.h>;
功能:;
返回:成功返回0,出错返回-1。
int accept(int sockfd, struct sockaddr *cliaddr, socklne_t *addrlen); 位于:<sys/socket.h>;
功能:有服务器调用,用于从已完成连接队列头返回下一个已完成连接;
返回:成功返回0,出错返回-1。
int connect(int sockfd,const struct sockaddr *servaddr, socklen_t addrlen); 位于:<sys/socket.h>;
功能:建立与服务器的连接;
返回:成功返回0,出错返回-1。
int clost(int sockfd); 位于:<sys/socket.h>;
功能:关闭套接字,终止连接;
返回:成功返回0,出错返回-1。
int getsockname(int sockfd, struct sockaddr *localaddr, socklen_t *adddrlen); 位于:<sys/socket.h>;
功能:返回与某个套接字关联的本地协议地址;
返回:成功返回0,出错返回-1。
int getpeername(int sockfd, struct sockaddr *peeraddr, socklen_t *adddrlen); 位于:<sys/socket.h>;
功能:返回某个套接字关联的外地协议地址;
返回:成功返回0,出错返回-1。
int shutdown(int sockfd, int howto); 位于:<sys/socket.h>;
功能:关闭套接字;
参数:sockfd为套接字标识;howto可能为: SHUT_RD关闭连接的输入流,SHUT_WR关闭连接的输出流,SHUT_RDWR输入输出都关闭;
返回:成功返回0,出错返回-1。
int getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen); 位于:<sys/socket.h>;
功能:获取影响套接字的选项;
返回:成功返回0,出错返回-1。
int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen); 位于:<sys/socket.h>;
功能:设置影响套接字的选项;
返回:成功返回0,出错返回-1。
int fcntl(int fd, int cmd, …); 位于:<fcntl.h>;
功能:执行各种描述符控制操作;
返回:成功返回0,出错返回-1。

二、UDP相关函数

函数 描述
ssize_t recvfrom(int sockfd, void *buff, size_t nbytes, int flags, struct sockaddr *from, socklen_t *addrlen); 位于:<sys/socket.h>;
功能:接受套接字发送来的数据;
返回:成功返回读取到的字节数,失败则为-1。
ssize_t sendto(int sockfd, const void *buff, size_t nbytes, int flags, const struct sockaddr *to, socklen_t addrlen); 位于:<sys/socket.h>;
功能:发送数据到指定的服务器;
返回:成功返回发送的字节数,失败则为-1。

三、SCTP相关函数

函数 描述
int sctp_bindx(int sockfd, const struct sockaddr *addrs, int addrcnt, int flags); 位于:<netinet/sctp.h>;
功能:允许SCTP套接字绑定一个特定地址子集;
返回:成功返回0,出错返回-1。
int sctp_connectx(int sockfd, const struct sockaddr *addrs, int addrcnt); 位于:<netinet/sctp.h>;
功能:连接到一个多宿对端机;
返回:成功返回0,出错返回-1。
int sctp_getpaddrs(int sockfd, sctp_assoc_t id, struct sockaddr **addrs); 位于:<netinet/sctp.h>;
功能:获取对端所有地址;
返回:成功返回0,出错返回错-1。
int sctp_freepaddrs(struct sockaddr *addrs); 位于:<netinet/sctp.h>;
功能:释放由sctp_getpaddrs函数分配的资源。
int sctp_getladdrs(int sockfd, sctp_assoc_t id, struct sockaddr **addrs); 位于:<netinet/sctp.h>;
功能:获取属于某个关联的本地地址;
返回:成功返回存放在addrs中的本端地址数,出错返回错-1。
void sctp_freeladdrs( struct sockaddr *addrs); 位于:<netinet/sctp.h>;
功能:释放由sctp_getladdrs函数分配的地址。
void sctp_sendmsg(int sockfd, const void *msg, size_t msgsz, const struc sockaddr *to, socklen_t tolen, uint32_t ppid, uint flags, uint16_t stream, uint32_t timetolive, uint32_t context); 位于:<netinet/sctp.h>;
功能:简化发送方式;
返回:成功返回所有写字节数,出错返回-1。
ssize_t sctp_recvmsg(int sockfd, const void *msg, size_t msgsz, const struc sockaddr *from, socklen_t *fromlen, struct sctp_sndrcvinfo *sinfo, int *msg_flags); 位于:<netinet/sctp.h>;
功能:简化获取数据过程;
返回:成功返回所有读字节数,出错返回-1。
int sctp_opt_info(int sockfd, sctp_assoc_t assoc_id, int opt, void *arg, socklen_t *siz); 位于:<netinet/sctp.h>;
功能:把参数重新包装到合适的getsockopt调用中的库函数;
返回:成功返回0,出错返回-1。
int sctp_peeloff(int sockfd, sctp_assoc_t id); 位于:<netinet/sctp.h>;
功能:从一个一到多式套接字中抽取一个关联,构成单独一个一到一式套接字;
返回:成功返回一个新的套接字描述符,出错返回错-1。

四、IP与地址相关函数

函数 描述
struct hostent *gethostbyname(const char *hostname); 位于:<netdb.h>;
功能:通过名称获取host;
返回:成功返回一个非空指针,出错返回-1。
struct hostent *gethostbyaddr(const char *addr, socklen_t len, int family); 位于:<netdb.h>;
功能:通过IP地址获取主机名;
返回:成功返回非空指针,出错返回-1。
struct servent *getservbyname(const char *servname, const char *protoname); 位于:<netdb.h>;
功能:通过给定名字与协议查找服务;
返回:成功返回非空指针,出错返回-1。
struct servent *getservbyport(int port, const char *protoname); 位于:<netdb.h>;
功能:根据给定端口号与协议查询服务;
返回:成功返回非空指针,出错返回错1。
struct servent *getaddrinfo(const char *hostname, const *service, const struct addrinfo *hints, struct addrinfo **result); 位于:<netdb.h>;
功能:处理名字到地址以及服务到端口这两种转换,返回一个sockaddr结构;
返回:成功返回0,出错返回-1。
const char *gai_strerror(int error); 位于:<netdb.h>;
功能:返回一个指向对应的出错信息串的指针。
void freeaddrinfo(struct addrinfo *ai); 位于:<netdb.h>;
功能:清除getaddrinfo函数生成的内存空间。
int getnameinfo(struct sockaddr *sockaddr, socklen_t addrlen, char *host, socklen_t hostlen, char *serv, socklen_t servlen, int flags); 位于:<netdb.h>;
功能:返回描述其中的主机的一个字符串和描述其中的服务的另一个字符串;
返回:成功返回0,出错返回NULL。
struct hostent *gethostbyname_r(const char *hostname, struct hostent *result, char *buf, int buflen, int *h_errnop); 位于:<netdb.h>;
功能:;
返回:成功返回非空指针,出错返回NULL。
struct hostent *gethostbyaddr_r(const char *addr, struct int len, int type, struct hostent *result, char *buf, int buflen, int *h_errnop); 位于:<netdb.h>;
功能:;
返回:成功返回非空指针,出错返回NULL且设置error_num。
struct hostent *gethostbyname2(const chat *name, int af); 位于:<netdb.h>;
功能:;
返回:成功返回非空指针,出错返回错-1。
struct hostent *getipnodebyname(const chat *name, int af, int flags, int *error_num); 位于:<netdb.h>;
功能:;
返回:成功返回非空指针,出错返回NULL且设置error_num。

结构体

2.1 in_addr

/* Internet address.  */
typedef uint32_t in_addr_t;
struct in_addr
  {
    in_addr_t s_addr; /* 32为 IPV4 地址*/
  };

 

2.1 sockaddr_in

/* Structure describing an Internet socket address.  */
struct sockaddr_in
  {
    __SOCKADDR_COMMON (sin_);
    in_port_t sin_port;            /* Port number.  */
    struct in_addr sin_addr;        /* Internet address.  */

    /* Pad to size of `struct sockaddr'.  */
    unsigned char sin_zero[sizeof (struct sockaddr) -
               __SOCKADDR_COMMON_SIZE -
               sizeof (in_port_t) -
               sizeof (struct in_addr)];
  };

 

上一篇:用Opencv+树莓派+socket 实现远程监控


下一篇:学习笔记day1