• PUDN用户
    了解作者
  • Unix_Linux
    开发工具
  • 2KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • 10 积分
    下载积分
  • 20
    下载次数
  • 2005-08-18 03:26
    上传日期
TCP/IP中有关带外数据的SERVER/CLIENT端程序
oob.rar
  • svr_select.c
    2.7KB
  • www.pudn.com.txt
    218B
  • cli_select.c
    3.3KB
内容介绍
#include <sys/types.h> #include <sys/socket.h> #include <sys/time.h> #include <netinet/in.h> #include <arpa/inet.h rel='nofollow' onclick='return false;'> #include <errno.h> #include <fcntl.h> #include <netdb.h> #include <signal.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/stat.h> #include <sys/uio.h> #include <unistd.h> #include <sys/wait.h> #include <sys/un.h> #include <sys/ddi.h> static int servfd; static int nsec; /* seconds between each alarm */ static int maxp; /* probes w/no response before quit*/ static int nprobes; /* probes since last server response*/ static void sig_urg(int); static void sig_alm(int); void heartbeat_cli(int servfdx,int nsecx,int maxpx); void client_str(FILE* fp,int sockfd); int main(int argc,char** argv) { int sockfd,n; char recvline[1000+1]; struct sockaddr_in servaddr; if(argc!=2) { printf("error1!\n"); exit(0); } if (( sockfd = socket(AF_INET,SOCK_STREAM,0)) < 0) { printf("sock error !\n"); exit(0); } bzero(&servaddr,sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_port = htons(1388); servaddr.sin_addr.s_addr = inet_addr(argv[1]); if( connect(sockfd,(struct sockaddr*)&servaddr,sizeof(servaddr)) < 0) { printf("connect error!\n"); exit(0); } client_str(stdin,sockfd); exit(0); } void heartbeat_cli(int servfdx,int nsecx,int maxpx) { servfd = servfdx; if((nsec = nsecx) < 1) nsec = 1; if((maxp = maxpx) < nsec) maxp = nsec; nprobes = 0; signal(SIGURG,sig_urg); fcntl(servfd,F_SETOWN,getpid()); signal(SIGALRM,sig_alm); alarm(nsec); } void client_str(FILE* fp,int sockfd) { int maxfdp1,stdineof; fd_set rset; char sendline[1000],recvline[1000]; int n; int ret; stdineof = 0; FD_ZERO(&rset); heartbeat_cli(sockfd,1,5); for(;;) { if(stdineof == 0) FD_SET(fileno(fp),&rset); FD_SET(sockfd,&rset); maxfdp1 = max(fileno(fp),sockfd) + 1; if((ret = select(maxfdp1,&rset,NULL,NULL,NULL)) == EINTR) continue; if(FD_ISSET(sockfd,&rset)) /* socket is readable*/ { if(( n = read(sockfd,recvline,1000)) == 0) { if(stdineof == 1) return; else printf("client_str:server terminated premature!\n"); return; } recvline[n] = 0; fputs(recvline,stdout); /* write(stdout,recvline,n);*/ } if(FD_ISSET(fileno(fp),&rset)) /* input is readable*/ { if(fgets(sendline,1000,fp) == NULL) { stdineof = 1; shutdown(sockfd,SHUT_WR); /* send FIN */ FD_CLR(fileno(fp),&rset); continue; } write(sockfd,sendline,strlen(sendline)); } } } static void sig_urg(int signo) { int n; char c; if((n = recv(servfd,&c,1,MSG_OOB)) < 0) { if(errno != EWOULDBLOCK) printf("receive error!\n"); } nprobes = 0; return; } static void sig_alm(int signo) { printf("this is client's %d \n",nprobes); nprobes++; printf("this is client's %d \n",nprobes); if(nprobes > maxp) { printf("server is unreachable!\n"); exit(0); } printf("this is client's %d \n",nprobes); send(servfd,"1",1,MSG_OOB); alarm(nsec); return; }
评论
    相关推荐
    • Linux网络编程-335页
      Linux网络编程-335页
    • tcp/ip详解-协议
      详细介绍了TCP/IP,学习网络必需了解的。介绍了tcp/ip协议内容,如何实现。
    • Linux网络编程
      第一章 概论..................................................................................................................1 1.1 网络的历史..............................................................
    • 内核链表TCP广播点播.rar
      TCP 网络通信,实现点播广播,主要使用知识 IO 的多路复用,以及Linux内核链表的使用。
    • MacOS-iOS-kernel-necp_client_action-OOB-write-vulnerability-
      MacOS / iOS内核necp_client_action OOB写入漏洞 necp_client_action是系统调用SYS_necp_client_action的处理程序。 在此函数内部,当操作为NECP_CLIENT_ACTION_UPDATE_CACHE时,将调用necp_client_update_cache。 ...
    • Linux 网络编程
      内容包含Linux系统概述、Linux编程环境、Linux文件系统简介、Linux下的进程和线程、TCP/IP协议族、应用层网络服务程序、TCP编程、主机信息获取、数据IO复用、UDP编程、高级套接字、套接字选项、原始套接字、服务器...
    • win2000驱动程序设计指南
      数据传输 64 4.1 中断处理 64 4.2 DPC处理程序 66 4.3 带外(OOB)数据包 66 4.3.1 等待发送的OOB数据 67 4.3.2 接收的OOB数据 68 4.4 发送包 69 4.4.1 无连接微端口的多包传送 70 4.4.1.1 ...
    • Linux网络编程
      6.11.3 OOB 传输套接字例程(客户端代码Client.c)................ 196 6.11.4 编译例子.......... 199 6.12 使用Inetd(Internet 超级服务器) ......... 199 6.12.1 简介................. 199 6.12.2 一个简单的...
    • linux 网络编程源代码
      第一章 概论 ..................................................................................................................1 1.1 网络的历史.............................................................
    • sendmail.8.10.0.Beta10.tar.Z
      被广泛使用的发送邮件(SMTP)服务器