1

tcp/ipに簡単な接続client-serverを書きましたc++

これは、接続を処理するサーバーの一部です

int sockfd, newsockfd;
socklen_t clilen;
struct sockaddr_in serv_addr, cli_addr;
int n = 0;

sockfd = socket(AF_INET,SOCK_STREAM,0);
if(sockfd < 0){
    cout << "Error opening socket" << endl;
    exit(1);
}

bzero((char*)&serv_addr, sizeof(serv_addr));

serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = INADDR_ANY;
serv_addr.sin_port = htons(portno);

if(bind(sockfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr))<0){
    cout << "Error binding" << endl;
    exit(1);
}

listen(sockfd,1);
clilen = sizeof(cli_addr);

newsockfd = accept(sockfd,(struct  sockaddr *)&cli_addr, &clilen );

if(newsockfd < 0){
    cout << "Error accepting" << endl;
    exit(1);
}

bzero(bytes,size_tot);
uint64_t total_bytes_read = 0;
uint64_t total_bytes_to_read = size_tot;
while(total_bytes_read < total_bytes_to_read){
    int bytes_read = read(newsockfd,bytes + total_bytes_read,total_bytes_to_read - total_bytes_read);
    if(bytes_read == -1){
        cout << "error reading "<< endl;
        n = -1;
        break;
    }
    total_bytes_read += bytes_read;
}

しかし、これは、読み取るバイトの合計量がわかっている場合に機能します。読み取るデータの総量が不明な場合はどうなりますか? このコードを変更するにはどうすればよいですか?

4

2 に答える 2