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

guosha fuqd273 以及各位高人能否进来下?

    来源: 互联网  发布时间:2016-04-04

    本文导语:   各位老师请帮我看一下   下面是我参阅了网上一些资料写的一个程序,目的是用来处理单服务器与多客户端实时收发报文,服务器端对报文解析处理。但觉得比之accept阻塞加多进程没有太大的优势,反而有很多...

 各位老师请帮我看一下

  下面是我参阅了网上一些资料写的一个程序,目的是用来处理单服务器与多客户端实时收发报文,服务器端对报文解析处理。但觉得比之accept阻塞加多进程没有太大的优势,反而有很多的硬伤:

源代码:
Server端:
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
 
#define MAX_NUM 10
 
int 
create_socket( char* _ip, int _port ) 
{
    int sockfd;
    int backlog = 5;
    int opt; 
    socklen_t opt_len;
    struct sockaddr_in svr_addr;
    struct hostent *host;
    struct in_addr in_ip;
    
    opt = 1;
    opt_len = sizeof(int);
 
    if ( -1 == ( sockfd=socket( AF_INET, SOCK_STREAM, 0 ) ) ) {
        printf( "Socket() error!原因:[%d]%sn", errno, strerror(errno) );
        return -1;
    }
 
    setsockopt( sockfd, SOL_SOCKET, SO_REUSEADDR, &opt, opt_len );
 
    bzero( &svr_addr, sizeof(svr_addr) );
    svr_addr.sin_family  = AF_INET;
    svr_addr.sin_port    = htons( _port );
    svr_addr.sin_addr.s_addr = htonl( INADDR_ANY );
    bzero( &(svr_addr.sin_zero), 8 );
 

    if ( -1 == ( bind( sockfd, (struct sockaddr *)(&svr_addr), sizeof( svr_addr ) ) ) ) {
        printf( "Bind() error!原因:[%d]%sn", errno, strerror(errno) );
        return -1;
    }
 
    if ( -1 == ( listen( sockfd, backlog ) ) ) {
        printf( "Listen() error!原因:[%d]%sn", errno, strerror(errno) );
        return -1;
    }
  
    printf( "服务器监听已启动:[hostname:%s] [PORT:%d]n", getenv("HOSTNAME"), _port );
 
    return sockfd;
}
 
int 
main()
{
    int retval;
    int clisock_set[5];
    int svrsock, clisock;
    fd_set readfd, rfds;
    char buf[1024];
    struct sockaddr_in svr_addr, cli_addr;
    struct timeval timeout;
   int cnt = 1;
    int ii;
 
    int maxfd = -1;
    int port_num = 11111;
    char ip_str[] = "localhost";
    int addr_len = sizeof(cli_addr);
    
    svrsock = create_socket( ip_str, port_num );
    if ( svrsock == -1 ) {
        perror( "create_socket()" );
        exit(-1);
    }
    
    for ( ii = 0; ii 

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐


  • 站内导航:


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

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

    浙ICP备11055608号-3