我最近得到了多个项目的想法,都涉及从文件中读取IP地址.由于它们都应该能够处理大量主机,因此我尝试实现多线程或创建套接字池并从中选择() - 以实现某种形式的并发以获得更好的性能.在多个场合,从文件中读取似乎是提高性能的瓶颈.我理解它的方式,从具有fgets或类似的文件读取是一个同步,阻塞操作.因此,即使我成功实现了异步连接到多个主机的客户端,操作仍然是同步的,因为我一次只能从文件中读取一个地址.
/* partially pseudo code */
/* getaddrinfo() stuff here */
while(fgets(ip, sizeof(ip), file) {
FD_ZERO(&readfds);
/* create n sockets here in a for loop */
for (i = 0; i < socket_num; i++) {
if (newfd > fd[i]) newfd = fd[i];
FD_SET(fd[i], &readfds);
}
/* here's where I think I should connect n sockets to n addresses from file
* but I'm only getting one IP at a time from file, so I'm not sure how to …Run Code Online (Sandbox Code Playgroud) 代码编译并运行得很好,除非我只指定了一个命令行选项,那么它就是segfaults.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
void printHelp()
{
printf("Usage: fstring [ char ] [ amount ] Optional:[ outfile ]\n"
"Example: fstring A 100 out.txt\n");
exit(1);
}
char *f_string(const char *s, int t)
{
int i; char *dst = malloc(t * strlen(s) + 1);
for(i = 0; i < t; i++) {
strcat(dst, s);
}
return dst;
}
int main(int argc, char *argv[])
{
if(argc < 2) {
printf("You need at least two arguments!\n");
return 1;
} …Run Code Online (Sandbox Code Playgroud)