当前位置:  技术问答>linux和unix

给个很简单的例子,socket的!

    来源: 互联网  发布时间:2015-08-15

    本文导语:  一个socket服务端,最好是守护进程那种,接到连接请求后派生一个子进程来处理该连接通讯。谢谢。 | int daemon_init() { char szcwd[MAX_PATH]={0}; pid_t pid; if((pid=fork())=2){ if(strcmp(argv[1],"debug")==0){ ...

一个socket服务端,最好是守护进程那种,接到连接请求后派生一个子进程来处理该连接通讯。谢谢。

|
int daemon_init()
{
char szcwd[MAX_PATH]={0};
pid_t pid;
if((pid=fork())=2){
if(strcmp(argv[1],"debug")==0){
_DEBUG_=ON;
}
}

(void) signal(SIGPIPE,SIG_IGN); // 忽略部分信号,增强健壮性
(void) signal(SIGHUP,SIG_IGN);
(void) signal(SIGINT,SIG_IGN);

if(_DEBUG_==OFF){
daemon_init();

fd_standout = open(ENV_STANDOUT,O_WRONLY|O_CREAT|O_APPEND);
fd_standerr = open(ENV_STANDERR,O_WRONLY|O_CREAT|O_APPEND);

close(1); // 关闭标准输出
dup(fd_standout); // 将标准输出重定向到该文件

close(2); // 关闭标准错误输出
dup(fd_standerr); // 将标准错误输出重定向到该文件

close(fd_standout); // 关闭原文件句柄
close(fd_standerr); // 关闭原文件句柄

close(0);  //关闭标准输入
}
// else{
//// daemon_init();
// }

FMODE_SERVICE.StartMonitor();
int ret = serv_listen();

switch(ret){
case -1:
LOG(DEBUG,"本地监听失败");
break;
case -2:
LOG(DEBUG,"本地监听线程创建失败");
break;
case 0:
LOG(DEBUG,"本地监听程序安全退出.");
break;
}

return 0;
}

int //守护进程通过本地socket接收命令
serv_listen()
{
int sockfd,connfd;
socklen_t clilen;
struct sockaddr_un  cliaddr,servaddr;
const char szpath[]="fmode_sockt";

sockfd=socket(AF_LOCAL,SOCK_STREAM,0);

if(sockfd==-1){
perror("创建socket失败");
return -1;
}
unlink(szpath);

bzero(&servaddr,sizeof(servaddr));

servaddr.sun_family=AF_LOCAL;

strncpy(servaddr.sun_path,szpath,sizeof(servaddr.sun_path)-1);

if(-1==bind(sockfd,(struct sockaddr*)&servaddr,SUN_LEN(&servaddr))){
perror("绑定socket失败");
return -1;
}

    if(listen(sockfd,BACKLOG)==-1){
perror("listen failure");
return -1;
    }

accept_thd((void*)&sockfd);

shutdown(sockfd,SHUT_RDWR);
return 0;
}

void
accept_thd(void* argv)
{
int sockfd=*(int*)argv;
int connfd;
socklen_t clilen;
struct sockaddr_un  cliaddr;
int i=0;

while(1)
    {
clilen = sizeof(cliaddr);
connfd = accept(sockfd,(struct sockaddr*)&cliaddr,&clilen);

request(connfd);
    }
shutdown(connfd,SHUT_RDWR);
}

int
request(int connfd)
{
int n=0;
sThd_Ctxt thd_ctxt;

bzero(&thd_ctxt,sizeof(tagThd_Ctxt));
bzero(thd_ctxt.buf,sizeof(thd_ctxt.buf));
n=recv(connfd,thd_ctxt.buf,MAX_PARAM_LEN,0);

if(g_bIdle==false){//限制一次只能执行一条命令
echo_req(connfd,"系统正忙,请稍候再执行......n");
shutdown(connfd,SHUT_RDWR);
return 0;
}

if(n>0){
int rc;
pthread_t t;
thd_ctxt.fd = connfd;
rc =pthread_create(&t,NULL,doit_thd,(void*)&thd_ctxt);
}
else{
shutdown(connfd,SHUT_RDWR);
}

return 0;
}

void*
doit_thd(void* argv)
{
sThd_Ctxt *pthd_ctxt;
pthd_ctxt = (sThd_Ctxt*)argv;
pthread_detach(pthread_self());
if(doit(pthd_ctxt->fd,pthd_ctxt->buf)==-1){
LOG(DEBUG,"已经退出系统.");
exit(0);
}
}

|
参考UNIX NETWROKING PROGRAMMING

    
 
 

您可能感兴趣的文章:

  • 哪位高手给个unix系统下C语言socket+fork()+select()的例子?
  • PHP异步调用socket小例子
  • 求助linux下socket多线程编程的例子(C语言写的)
  • 在编译有关socket的例子时老有这些错误,是什么一回事
  • UNIX环境高级编程里一个SOCKET编程的例子问题
  • socket问题求例子!!
  • 100分:~~请哪位大侠随便用java写一个socket传文件的例子,服务器和客户端写全哦!!~~
  • linux 下g++编译 书上的socket的例子出错,请帮忙看看?
  • 谁能给一个unix下用c写的服务器端socket例子,谢谢了,急啊
  • socket中经典例子talk,编译错误,请教原因
  • 真心求助:各位大哥能帖一个 socket 程序的例子吗?(要是多线程序的),分少了开帖再加!谢谢!
  • SCO UNix 的 c/c++ 编译器哪儿有? 带socket的例子哪儿有?
  • 请教一个socket 问题,例子来源于unp31
  • 谁有一个用c的socket传送特殊格式数据包的例子?具体格式如下:
  • 关于socket例子.
  • 哪位大虾有数据报Socket客户端例子的java源码?急……
  • 谁能给个 linux 下的 socket网络通信程序例子(C语言的)
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 数据库 iis7站长之家
  • 谁有操作系统PV操作的例子???谁有操作系统PV操作的例子???谢谢!!
  • java操作excel2007文档介绍及代码例子
  • 谁有设计模式的例子例子?
  • 各位老大,可以提供一个EJB(BMP)的例子吗? 同时请教PK类的作用?(给例子就有分)
  • j2ee架构最经典的例子是什么?petstore算是最经典的例子吗?
  • 请问那位大虾有关于EJB(包括Servlet,jsp)的项目例子 100分奉送呀!
  • 想了解一下我的编译器是否可用,把一个例子给大家试用
  • 请问那里有现成ejb的具体的简单的实际例子?
  • JQuery转义id中特殊字符的例子
  • 谁有使用sharetop的webchart的JSP例子呀
  • 100分求java +VC6.0使用JNI的最简单例子
  • 求一个cmp2。0的例子:
  • 请教怎么用Servlet作文件上传?最好能有例子,我是新手。
  • 需要minicom runscript的例子
  • 关于unix环境高级编程里面的例子
  • 怎样用JDK写用于ASP的组件?最好有例子或详细资料!
  • php代码审计比较有意思的例子
  • 求glib2的使用例子
  • 请问sun的jwsdk的例子中jsp为什么不能使用?
  • 谁能给我在JB6中EJB开发的一个简单例子,分数不是问题


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3