[Suzaku:00248] Still system crashes

Eike Suthau email@hidden
2005年 2月 22日 (火) 02:16:35 JST


すみません、も一度リードのアイケです、

私は前のメールのmallocの方法をしましたけど何分後にcrashをします。
今理があんまり分かりません。
私はnon-blocking IOが必要ですから手伝って下さい。

以下にソースが書いています。PCの方にテストのために”nc -l -p 7000”をしました。
パソコンにプログラムが完璧にできますけど。

よろしく
==============================================
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include "measif.h"

int client_connect(char * server,int port){
 int client_socket, longueur;
 struct sockaddr_in address;

 client_socket = socket(AF_INET,SOCK_STREAM,0);
 if (client_socket == -1){
  fprintf (stderr, "\n\nERROR: Can not create socket - %s\n\n", 
strerror(errno));
  return -1;
 }
 
 address.sin_family = AF_INET;
 address.sin_port = htons(port);
    inet_pton(AF_INET,server,&address.sin_addr);
   
    longueur=connect(client_socket,(struct sockaddr 
*)&address,sizeof(address));
      if (longueur!=0){
  printf("Error connecting to server. %s\n",strerror(errno));
  return -1;
 }
 
 fcntl( client_socket, F_SETFL, O_NONBLOCK); //make socket non-blocking
 return client_socket;
}


int main(int argc, char *argv[])
{
 int sock, nbytes,i=0;
 char buffchar=0, *command, *buffer;
 command=malloc(1024);
 buffer=malloc(1024);
 
 sock=client_connect("172.16.50.130",7000);
 if (sock==-1) return 1;
 
 while(1){
  nbytes=read(sock,&buffchar,1);
  if (nbytes==1) command[i++]=buffchar;
  else if (errno!=EAGAIN) return 1;
  
  if (buffchar=='\n') {
   command[i]=0;
   sprintf(buffer,"\nBytes available: %s\n",command);
   write(sock, command, strlen(command));
   buffchar=0;
   i=0;
  }
  
  if (command[0]=='q') return 0; //exit on encountering "q"
 }
return 0;
}
==============================================


suzaku メーリングリストの案内