linux dengar apa maksudnya

藏色散人
藏色散人asal
2023-04-21 10:58:082411semak imbas

linux listen bermaksud mendengar, dan listen merujuk kepada mendengar permintaan sambungan daripada soket tcp pelanggan fungsi dengar biasanya dipanggil selepas memanggil bind dan sebelum memanggil accept, dan prototaip fungsinya ialah "int listen ( int sockfd; , int tunggakan)".

linux dengar apa maksudnya

Persekitaran pengendalian tutorial ini: sistem linux5.9.8, komputer Dell G3.

linux listen Apakah maksudnya?

fungsi dengar di bawah linux

dengar: mendengar permintaan sambungan daripada soket tcp pelanggan

fungsi dengar biasanya dalam Selepas memanggil bind - sebelum memanggil accept, prototaip fungsinya ialah:

#include<sys/socket.h>  
int listen  (  int sockfd,  int backlog  )
Parameter sockfd ialah soket yang diambil tindakan oleh fungsi dengar
The parameter tunggakan ialah panjang baris gilir mendengar. Semasa proses memproses permintaan sambungan, mungkin terdapat permintaan sambungan lain. Oleh kerana sambungan TCP adalah satu proses, mungkin terdapat keadaan separa bersambung Kadangkala disebabkan terlalu ramai pengguna yang cuba menyambung pada masa yang sama, proses pelayan tidak dapat menyelesaikan permintaan sambungan dengan cepat. Jika keadaan ini berlaku, bagaimanakah proses pelayan mahu kernel mengendalikannya? Kernel akan mengekalkan baris gilir dalam ruang prosesnya sendiri untuk menjejaki sambungan yang telah selesai ini tetapi proses pelayan belum lagi mengambil alih sambungan (sambungan yang belum lagi memanggil fungsi terima Kernel tidak boleh membuat baris gilir sewenang-wenangnya besar). jadi ia mesti Terdapat had atas saiz. Tunggakan ini memberitahu kernel untuk menggunakan nilai ini sebagai had atas.

返回值

成功

失败

是否设置errno

0

−1

Nilai pulangan
Kejayaan

Kegagalan Sama ada untuk menetapkan errno


0

−1

Ya

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/wait.h>
int main()
{
int sockfd,new_fd;
struct sockaddr_in my_addr;
struct sockaddr_in their_addr;
int sin_size;
//建立TCP套接口
if((sockfd = socket(AF_INET,SOCK_STREAM,0))==-1)
{
printf("create socket error");
perror("socket");
exit(1);
}
//初始化结构体,并绑定2323端口
my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(2323);
my_addr.sin_addr.s_addr = INADDR_ANY;
bzero(&(my_addr.sin_zero),8);
//绑定套接口
if(bind(sockfd,(struct sockaddr *)&my_addr,sizeof(struct sockaddr))==-1)
{
perror("bind socket error");
exit(1);
}
//创建监听套接口  监听队列长度为10
if(listen(sockfd,10)==-1)
{
perror("listen");
exit(1);
}

//等待连接
while(1)
{
sin_size = sizeof(struct sockaddr_in);

printf("server is run./n");
//如果建立连接,将产生一个全新的套接字
if((new_fd = accept(sockfd,(struct sockaddr *)&their_addr,&sin_size))==-1)
{
perror("accept");
exit(1);
}
printf("accept success./n");
//生成一个子进程来完成和客户端的会话,父进程继续监听
if(!fork())
{
printf("create new thred success./n");
//读取客户端发来的信息
int numbytes;
char buff[256];
memset(buff,0,256);
if((numbytes = recv(new_fd,buff,sizeof(buff),0))==-1)
{
perror("recv");
exit(1);
}
printf("%s",buff);
//将从客户端接收到的信息再发回客户端
if(send(new_fd,buff,strlen(buff),0)==-1)
perror("send");
close(new_fd);
exit(0);
}
close(new_fd);
}
close(sockfd);
}

#include <stdio.h>
#include <stdlib.h>

#include <string.h>
#include <netdb.h>
#include <sys/types.h>

#include <sys/socket.h>

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

int sockfd,numbytes;
char buf[100];

struct sockaddr_in their_addr;
//int i = 0;
//将基本名字和地址转换


//he = gethostbyname(argv[1]);

//建立一个TCP套接口
if((sockfd = socket(AF_INET,SOCK_STREAM,0))==-1)
{
perror("socket");
printf("create socket error.建立一个TCP套接口失败");
exit(1);
}
//初始化结构体,连接到服务器的2323端口
their_addr.sin_family = AF_INET;
their_addr.sin_port = htons(2323);
// their_addr.sin_addr = *((struct in_addr *)he->h_addr);
inet_aton( "127.0.0.1", &their_addr.sin_addr );


bzero(&(their_addr.sin_zero),8);
//和服务器建立连接
if(connect(sockfd,(struct sockaddr *)&their_addr,sizeof(struct sockaddr))==-1)
{
perror("connect");
exit(1);
}
//向服务器发送数据
if(send(sockfd,"hello!socket.",6,0)==-1)
{
perror("send");
exit(1);
}
//接受从服务器返回的信息
if((numbytes = recv(sockfd,buf,100,0))==-1)
{
perror("recv");
exit(1);
}
buf[numbytes] = &#39;/0&#39;;
printf("Recive from server:%s",buf);
//关闭socket
close(sockfd);

return 0;
}

Mesej ralat:

EADDRINUSE: Soket lain juga di sana Dengar di pelabuhan yang sama.
EBADF: Parameter sockfd ialah deskriptor fail haram.
ENOTSOCK: Parameter sockfd bukan deskriptor fail.
EOPNOTSUPP: Jenis soket tidak menyokong operasi dengar. Contoh: Pembelajaran yang disyorkan: "tutorial video linux"

Atas ialah kandungan terperinci linux dengar apa maksudnya. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:Apakah fail soket linux?Artikel seterusnya:Apakah fail soket linux?