TCP端口号与并发服务器
背景 : 并发服务器中,主服务循环通过派生一个子进程来处理每个新的连接,如果一个子进程继续使用服务器众所周知的端口来服务一个长时间的请求,那将会发生什么?首先,在一台 IP地址为 10.2.16.48 的服务器,服务器在端口21上执行被动打开(socket,bind,listen) 等待客户请求。服务器 : {*:21,*:*}...
View Article套接字对
一个TCP连接的套接字对(socket pair) 是一个定义该连接的两个端点的四元组:本地IP地址、本地TCP端口号、外地IP地址,外地TCP端口号。套接字对唯一标识网络的一个TCP连接。标识每个端点的两个值(IP和端口号) 通常成为一个 套接字ps: 好短....memorygarden 2011-07-04 00:44 发表评论
View ArticleTCP连接的建立和终止
建立一个TCP连接时,会发生下述情形:1、服务器端必须做好准备接受外来的连接。这通常通过 socket(), bind(), listen() 三个函数来完成的。我们称之为 被动打开(passive open).2、客户端通过调用connect发起主动打开(active...
View Articlesocket gethostbyname
struct hostent* gethostbyname(const char* name);struct hostent 是这样定义的:struct hostent{ char* h_name; char **h_aliases; int h_addrtype; int h_length; char **h_addr_list;};解释 : h_name :...
View Articlesocket gethostname
gethostname 可以取得本地主机的信息。返回正在执行它的计算机的名字int gethostname(char* hostname, size_t size);参数: hostname : 指向字符数组的指针,当函数返回的时候,它里面的数据就是本地主机的名字。 size : 是hostname 只想数组的长度。返回值 -1 出错 errno 全局变量存储出错信息。 0...
View Articlesocket getpeername
这个函数可以取得一个已经连接上的套接字的远程信息(例如 ip, port) 告诉你在远程和你连接的究竟是谁。int getpeername(int sockfd, struct sockaddr* addr, int *addrlen);参数: sockfd 是你想取得远程信息的那个套接字描述符 addr 是一个指向 struct sockaddr 或者是 struct...
View Articlesocket getsockopt setsockopt
int getsockopt (int sockfd, int level, int name, char* value, int* optlen);int setsockopt (int sockfd, int level, int name, char* value, int* optlen);参数: sockfd : 必须是一个已经打开的套接字 level :...
View Articlesocket close shutdown
传输完毕后,你需要关闭这个套接字描述符所表示的连接。close(sockfd);执行了close之后,套接字将不会允许进行读写操作,任何企图读写一个已经关闭的套接字,都会收到一个错误。如果你想对网络套接字的关闭进行进一步的操作,可以使用 shutdown 操作,它允许你进行单向的关闭,或者是全部禁止掉。int shutdown(int sockfd, int how);参数 : sockfd...
View Articlesocket recvfrom
int recvfrom (int sockfd, void* buf, int len, unsigned int flags, struct sockaddr* from, int* fromlen);参数: sockfd : 是你想要读取数据的套接字描述符 buf : 一个指针,指向你能存储数据的内存缓冲数据区 len : 缓存区的尺寸大小。 flags : 通常为0...
View Articlesocket sendto
进行无连接的UDP通讯使用的。使用sendto 函数,则数据会在没有建立任何网络连接额网络上传输。int sendto(int sockfd, const void* msg, int len, int flags, const struct sockaddr *to, int tolen);参数: sockfd : 代表你与远程程序连接的套接字 msg :...
View Articlesocket recv
函数 recv 在许多方面与 send 函数相似int recv (int sockfd, void* buf, int len, unsigned int flags);参数: sockfd :是你要读取数据的套接字描述符。 buf : 是一个指针,指向能存储数据的内存缓存数据。 len : 是缓存区的大小。 flags : 一般为0返回值: 正常: 它真正收到数据的长度...
View Articlesocket send
通过套接字进行通讯的函数int send(int sockfd, const void* msg, int len, int flags);参数: sockfd :代表你与远程程序连接的套接字 msg : 是一个指针,指向你想要发送信息的地址 len : 是你想要发送信息的长度 flags : 发送标记,一般为0返回值: 正常 :真正发送数据的长度。 错误 :...
View Articlesocket accept
大致过程如下: 客户机通过connect 函数来连接你机器上,某个你已经listen的端口 他的连接将被listen加入队列等待accept函数的调用。 你调用accept函数告诉他你准备连接。 accept函数返回一个新的套接字描述符,这个描述符代表了这个连接。...
View Articlesocket listen
listen()函数是等待别人连接,系统进行监听请求的函数。当有人连接你的时候,你需要做两步,通过listen函数等待连接请求,然后使用accept 函数处理int listen(int sockfd, int backlog);sockfd : 是一个套接字描述符,由socket()系统调用获得。backlog :...
View Articlesocket connect
int connect(int sockfd, struct sockaddr* serv_addr, int addrlen);socket : 套接字文件描述符,由socket函数返回的.serv_addr : 是一个存储远程计算机ip地址和端口信息的结构addrlen : sizeof(serv_addr)返回值 : 如果发生了错误,它会返回错误值-1 全局变量 errno...
View Articlesocket bind
bind 函数可以帮助你指定一个套接字使用的端口当你使用socket 函数获得一个套接字描述符后,你也许需要将socket绑定上一个你的机器的端口 当你需要进行端口listen操作,等待接收一个连入请求的时候,一般需要这一步。 与客户端的套接字关联的地址没有太大意义,当你只是想连接一台服务器,也就是进行connect操作的时候,这一步并不是必须的。int bind(int sockfd,...
View Articlesocket ip 转换函数
仅仅适用于ipv4的函数: 1 : inet_addr 函数将数字和点组成的字符串转换为一个无符号长整形 ina.sin_addr.s_addr = inet_addr("10.2.3.44") 注意:inet_addr 返回的已经是网络字节序的了,没有必要再次调用 htonl 函数 2 : inet_ntoa 函数接受一个sin_addr 将...
View Articlesocket 地址格式
Linux 中,套接字地址用如下结构表示:struct in_addr{ in_addr_t s_addr;};struct sockaddr_in{ sa_family_t sin_family; //address family in_port_t sin_port //port number struct in_addr sin_addr;//ipv4 address...
View Article字节序
每一台机器内部对变量的字节存储顺序不同,(有的系统是高位在前,地位在后,而有的是相反的),而网络传输数据大家一定要统一顺序,所以,对内部字节表示顺序和网络字节序不同的机器,就一定要对数据进行转换(比如ip地址,端口的表示) 如果相同的话,也要调用,转换与否是由系统函数自己来决定的。uint32_t htonl(uint32_t hostint32) // host to network long...
View Articlesocket ---- shutdown
int shutdown(int sockfd, int how)如果how 是 SHUT_RD 关闭读端,那么,无法从套接字读取数据。如果how 是 SHUT_WR 关闭写端,那么,无法使用套接字发送数据。如果how 是 SHUT_RDWR 那么 同时无法读取数据和发送数据能够close(关闭)...
View Article