zoukankan      html  css  js  c++  java
  • Linux 套接字socket的服务进程listen and accept

    #include<sys/socket.h>

    int listen(int sockfd,int backlog);

    int accept(int sockfd,struct sockaddr *addr,socklen_t len);

    还是一个例子:

    #include "unp.h"

    #include <time.h>

    int main(int argc,char**argv){

    listenfd=Socket(AF_INET,SOCK_STREAM,0);

    bzero(&servaddr,sizeof(servaddr));

    //..给servaddr赋值

    Bind(listenfd,(SA*)&servaddr,sizeof(servaddr));

    Listen(listenfd,LISTENQ);

    for(;;)

    {

     int connfd=Accept(listenfd,(SA*)NULL,NULL);

    .. //write

    }

    在这里listen函数表达服务进程愿意接受连接请求!其中LISTENQ是请求连接队列上限!

    一旦队满则服务进程拒绝其他请求。

    在这里的accpet函数表达服务进程开始获取连接请求,并返回一个新的connfd 套接字。该套接字和远方的

    客户端套接字连接。但是注意!!

    listenfd 此时并没有和远方的客户端套接字建立连接!所以才可以继续接受其他请求。

    在上面的例子中,如果很在意客户端的地址就可以这样改:

     int connfd=Accept(listenfd,(SA*)NULL,NULL);

    int connfd=Accept(listenfd,(SA*)&sockaddr,sizeof(sockaddr));

    如果并没有什么请求,服务进程却调用accept函数,服务进程会阻塞到一个请求来。

  • 相关阅读:
    CSRF-防御与攻击
    windows 命令
    Integer.parseInt(String str, int i)
    springCloud springmvc 七牛云存储整合百度富文本编辑器
    jsp 文件
    标签的使用
    富文本编辑器
    项目总结 js
    namenode 和 datanode 节点
    Hadoop wordcount
  • 原文地址:https://www.cnblogs.com/zzzPark/p/6408662.html
Copyright © 2011-2022 走看看