首页 > 其他 > 详细

linux网络编程步骤

时间:2014-02-18 15:20:37      阅读:313      评论:0      收藏:0      [点我收藏+]

 

编写套接字通信程序的步骤:

①socket:创建套接字
-------------------------------------------------------------------------------------
#include <sys/types.h>
#include <sys/socket.h>
int socket(  int domain,
      int type,
      int protocol);

domain(套接字域)取值:
AF_UNIX:unix文件系统套接字
AF_INET:因特网套接字

type(套接字类型)取值:
SOCK_STREAM:TCP流套接字
SOCK_DGRAM:UDP数据报套接字

protocol取值:
0(默认协议)

 

②sockaddr_in/sockaddr_un:套接字初始化
-------------------------------------------------------------------------------------
#include <sys/un.h>
struct sockaddr_un {
sa_family_t  sun_family;  /*AF_UNIX*/
char       sun_path[]; /*pathname*/
}

---------------------------------
#include <netinet/in.h>
struct sockaddr_in {
short int         sin_family; /*AF_INET*/
unsigned short int  sin_port;   /*Port number*/
struct in_addr    sin_addr;   /*Internet address*/
}
其中IP地址结构in_addr被定义为:
struct in_addr {
unsigned long int s_addr;
};

 

③bind:命名套接字
-------------------------------------------------------------------------------------
#include <sys/socket.h>
int bind( int socket,
     const struct sockaddr *address,
     size_t address_len);

 

④listen:服务器创建套接字队列
-------------------------------------------------------------------------------------
#include <sys/socket.h>
int listen(int socket, int backlog)

backlog表示队列长度,队列中未处理连接数大于backlog值时,拒绝连接
listen函数成功时返回0,失败时返回-1

 

⑤accept:服务器接受连接
-------------------------------------------------------------------------------------
#include <sys/socket.h>
int accept(  int socket,
      struct sockaddr *address,
      size_t *address_len);

accept系统调用只有当有客户试图连接到由socket参数指定的套接字上时才返回。
accept函数将创建一个新套接字来与该客户进行通信,并返回新套接字的描述符。
当有未处理客户连接时,accept函数将返回一个新的套接字文件描述符。
当发生错误时, accept函数返回-1


若套接字队列中无未处理连接,accept将其阻塞(程序将暂停)直到有客户建立连接。
int flags = fcntl(socket, F_GETFL, 0);
fcntl(socket, F_SETFL, O_NONBLOCK|flags);

 

⑥connect:客户端请求连接
-------------------------------------------------------------------------------------
#include <sys/socket.h>
int connect(      int socket,
        const struct sockaddr *address,
        size_t address_len);

将参数socket指定的套接字连接到参数address指定的服务器套接字,
address指向的结构长度有参数address_len指定。
参数socket指定的套接字必须是通过socket条用获得的一个有效的文件描述符。

connect成功时返回0,失败时返回-1。

如果连接不能立刻建立,connect调用将阻塞一段不确定的超时时间。
一旦这个超时时间到达,连接将被放弃,connect调用失败。

但如果connect调用被一个信号中断,blah, blah——

 

⑦close:关闭套接字
-------------------------------------------------------------------------------------
调用close函数终止服务器与客户端上套接字的连接,就如同底层文件描述符进行关闭一样。
连接的两端都关闭套接字。对服务器来说read调用返回0时关闭套接字。
但如果套接字是一个面向连接类型的,并设置了SOCK_LINGER选项,
close调用会在该套接字还有为传输数据时阻塞。

 

 这是《linux程序设计》第4版第15章的笔记,版权归原书作者及译者所有

linux网络编程步骤

原文:http://www.cnblogs.com/xiashu/p/3553677.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!