linux 套接口,Linux系统中BSD套接口开发的基础介绍(2)

Linux系统中BSD套接口开发的基础介绍(2)

2009-05-13 12:12:31来源:未知 阅读 ()

c4468b3f4df77e96b0a416fa2a870fba.png

#include

#include  /* socket(), bind(),

listen(), accept() */

#include

#include

#include

#include  /* fork(), write(), close() */

/*

* constants

*/

const char MESSAGE[] = "Hello, World!\n";

const int BACK_LOG = 5;

/*

*程序需要一个命令行参数:需要绑定的端口号

*/

int main(int argc, char *argv[])

{

int serverSocket = 0,

on = 0,

port = 0,

status = 0,

childPid = 0;

struct hostent *hostPtr = NULL;

char  hostname[80] = "";

struct sockaddr_in serverName = { 0 };

if (2 != argc)

{

fprintf(stderr, "Usage: %s \n",

argv[0]);

exit(1);

}

port = atoi(argv[1]);

/ *

*socket()系统调用,带有三个参数:

*    1、参数domain指明通信域,如PF_UNIX(unix域),PF_INET(IPv4),

*      PF_INET6(IPv6)等

*    2、type指明通信类型,最常用的如SOCK_STREAM(面向连接可靠方式,

*      比如TCP)、SOCK_DGRAM(非面向连接的非可靠方式,比如UDP)等。

*    3、参数protocol指定需要使用的协议。虽然可以对同一个协议

*      家族(protocol family)(或者说通信域(domain))指定不同的协议

*      参数,但是通常只有一个。对于TCP参数可指定为IPPROTO_TCP,对于

*      UDP可以用IPPROTO_UDP。你不必显式制定这个参数,使用0则根据前

*      两个参数使用默认的协议。

*/

serverSocket = socket(PF_INET, SOCK_STREAM,

IPPROTO_TCP);

if (-1 == serverSocket)

{

perror("socket()");

exit(1);

}

/*

* 一旦套接口被建立,它的运作机制可以通过套接口选项(socket option)进行修改。

*/

/*

* SO_REUSEADDR选项的设置把套接口设置成重新使用旧的地址(IP地址加端口号)而不等待

* 注意:在Linux系统中,如果一个socket绑定了某个端口,该socket正常关闭或程序退出后,

* 在一段时间内该端口依然保持被绑定的状态,其他程序(或者重新启动  的原程序)无法绑定该端口。

*

* 下面的调用中:SOL_SOCKET代表对SOCKET层进行操作

*/

on = 1;

status = setsockopt(serverSocket, SOL_SOCKET,

SO_REUSEADDR,

(const char *) &on, sizeof(on));

if (-1 == status)

{

perror("setsockopt(...,SO_REUSEADDR,...)");

}

/* 当连接中断时,需要延迟关闭(linger)以保证所有数据都

* 被传输,所以需要打开SO_LINGER这个选项

* linger的结构在/usr/include/linux/socket.h中定义:

*  struct linger

*  {

*   int l_onoff;  /* Linger active */

*   int l_linger;  /* How long to linger */

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com

特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值