基本TCP套接字编程

1.socket函数

#include<sys/socket.h>
int sockect(int family, int type, int protocol);
/**
*family指明协议族,它是AF_INET(IPv4), AF_INET6(IPv6),AF_LOCAL(Unix域),AF_ROUTE(路由套接字),AF_KEY(密钥套接字)
 
*type指明套接字类型,它是SOCK_STREAM(字节流套接字),SOCK_DGRAM(数据报套接字),SOCK_SEQPACKET(有序分组套接字),SOCK_RAW(原始套接字)
 
*protocol参数应设为某个协议类型常量,或者为0,以选择family和type组合的系统默认值。可选为IPPROTO_CP(TCP传输协议),IPPROTO_UDP(UDP传输协议),IPPROTO_SCTP(SCTP传输协议)
 
*成功返回非负的套接字描述符,否则为-1
*/
 
2.connect函数
#include <sys.sockect.h>
int connect(int sockfd, const strcut sockaddr *servaddr, socklen_t addrlen);
/**
*sockfd是套接字描述符
 
*servaddr是一个指向套接字地址结构的指针, addrlen则是该结构的大小
 
*若成功返回0,出错返回-1
 
*如果是TCP套接字,调用connect函数将激发TCP的三路握手过程。而且仅在建立成功或者出错时才返回,其中出错分为:
(1)若TCP没有收到SYN分节的响应,则返回ETIMEDOUT错误
(2)若对客户的SYN的响应是RST(表示复位),则表明服务器主机在指定的端口上没有进程在等待与之建立连接,错误ECONNREFUSED
(3)若客户发出的SYN在中间的某个路由器引发了destination unreachable ICMP错误,则返回EHOSTUNREACH 和 ENETUNREACH
*/
 
3.bind函数
#include <sys/socket.h>
int bind(int sockfd, const strcut sockaddr *myaddr, socklen_t addrlen);
/**
*sockfd指明套接字
 
*myaddr和addrlen分别指明绑定的地址和长度
 
*通配地址的指定,对于IPv4
struct scokaddr_in servaddr;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
对于IPv6
strcut sockaddr_in6 serv;
serv.sin6_addr.s6_addr = in6addr_any;
 
*若成功返回0,出若则为-1
*/
 
4.listen函数
#include <sys/sockect.h>
int listen(int sockfd, int backlog);
/**
*第一个参数将一个未连接的套接字转换成一个被动套接字
 
*第二个参数规定了内核为相应的套接字排队的最大连接个数
 
*若成功返回0,出错为-1
*/
 
5.accept函数
#include <sys/sockect.h>
int accept(int sockfd, struct sockaddr *cliaddr, socklen_t *addrlen);
/**
*参数cliaddr和addrlen用来返回已连接的对端进程的协议地址。
 
*若成功则返回非负描述符,若出错则为-1
*/
 
6.fork
#include <unistd.h>
pid fork(void);
/**
*
*在子进程中为0,在父进程中为子进程ID,若出错则为-1
*/
 
7.close函数
#include <unistd.h>
int close(int sockfd);
/**
*
*
*若成功则为0,若出错则为-1
*/
 
8.getsockname和getpeername函数
#include <sys/socket.h>
int getsockname(int sockfd, struct sockaddr *localaddr, socklen_t *addrlen);
int getpeername(int sockfd, struct sockaddr*peername, socklen_t *addrlen);
/**
*获取本地或对端的地址
*若成功则为0,若出错则为-1
*/
posted @ 2015-03-17 16:18  deng_huan  阅读(99)  评论(0编辑  收藏  举报