套接字连接在主功能内部但不在功能内部

socket connecting in main but not inside a function

本文关键字:功能 内部 连接 套接字      更新时间:2023-10-16

我正在尝试创建一个套接字,连接方法工作正常(即如果从主函数调用则返回 0(,但如果从 main 以外的某个函数调用,则工作不正常(即返回非零值( 为什么? 提前致谢

#include<iostream>
#include<stdlib.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<arpa/inet.h>//the new file.
#include<unistd.h>//for using the sleep function.
#include<string.h>
using namespace std;
//char request1[]="GET /index.html HTTP/1.1rnrn";
void T_occupy(char* request,int n,struct sockaddr_in* server_address,int time_slot){
    int my_socket;
    while(1){
            my_socket=socket(AF_INET,SOCK_STREAM,0);
            int connection_status=connect(my_socket,(struct sockaddr*)&server_address,sizeof(server_address));
            if(connection_status){
                    cout<<"error in establising the connection n";
                    return;
            }
            int i;
            for(i=0;i<n;i++){
                    char temp=request[i];
                    send(my_socket,&temp,sizeof(temp),0);
                    sleep(time_slot);
            }
            close(my_socket);
    }
}
int main(int argc,char* argv[]){
    //first we will do thigns with only one thread.
    char* address;
    char* msg="GET   /Iamabouttoendyourstorybyhackingyouandyouwillnotbeabletoserveanyone.html HTTP/1.1rnrn";
    address=argv[1];
    struct sockaddr_in server_address;
    server_address.sin_family=AF_INET;
    server_address.sin_port=htons(80);
    inet_aton(address,(struct in_addr*)&server_address.sin_addr.s_addr);
    T_occupy(msg,strlen(msg),&server_address,7);
    return 0;
}

您正在传递&server_address,它具有类型struct sockaddr_in ** connect,它期望将struct sockaddr_in *转换为struct sockaddr *。 您还传递了指针的大小sizeof(server_address)而不是结构的大小。

删除第二个参数中不需要的&,并将*添加到最后一个参数:

int connection_status=connect(my_socket,(struct sockaddr*)server_address,sizeof(*server_address));