示例#1
0
文件: sockio.c 项目: apc-llc/cernlib
/*
 * Receives message string from the network and
 * returns the appropriate numeric token.  If error
 * occurs -1 is returned.
 */
int
recvmstr(int sock,char **s)
{
  char buf[MAX_MSGSTR + 1];
  unsigned long ultmp;
  int i;
  size_t len;

  DLOG_MSG(("recvmstr() : recvul(%d)",sock));
  if (!recvul(sock,&ultmp))
    return -1;
  len = (size_t)ultmp;
  if (len == 0 || len > MAX_MSGSTR) {
    errlog(LOG_ERR,"recvmstr() : len=%lu",(unsigned long)len);
    return -1;
  }
  DLOG_MSG(("recvmstr() : x_recv(%d)",sock));
  if (!x_recv(sock,buf,len)) {
    DLOG_ERROR(("recvstr()"));
    return -1;
  }
  buf[len] = '\0';
  DLOG_MSG(("recvstr() : buf=%s",buf));
  for (i = 0; s[i]; i++)
    if (streql(s[i],buf)) return i;
  errlog(LOG_ERR,"recvmstr() : unknown message (%s)",buf);
  return -1;
}
示例#2
0
文件: mail.c 项目: riehli-r/mail
int              mail(char **argv)
{
  SOCKET          sock;
  SOCKADDR_IN     sin;
  struct hostent  *hostinfo;
  char            buffer[SIZE_BUFFER];


  sock = socket(AF_INET, SOCK_STREAM, 0);
  if (sock == INVALID_SOCKET) {
    my_putstr("Error: Socket cannot be created.\n");
    return (sock);
  }
  hostinfo = gethostbyname(HOSTNAME);
  sin.sin_addr = *(IN_ADDR *) hostinfo->h_addr;
  sin.sin_port = htons(25);
  sin.sin_family = AF_INET;
  if (connect(sock, (SOCKADDR *) &sin, sizeof(sin)) == SOCKET_ERROR) {
    my_putstr("Erreur: cannot connect to the server.\n");
    return (SOCKET_ERROR);
  }
  x_recv(sock, buffer);
  my_putstr(buffer);
  smtp(argv[1], argv[2], argv[3], argv[4], &sock);
  return (0);
}
示例#3
0
文件: s_hello.c 项目: riehli-r/mail
void            s_hello(SOCKET *sock, char *name, int put)
{
  char          *msg;
  char          buffer[SIZE_BUFFER];

  msg = malloc(100);
  create_mesg(msg, HELLO, name, NULL);
  x_send(*sock, msg);
  x_recv(*sock, buffer);
  if (put) {
    my_putstr(buffer);
  }
}
示例#4
0
文件: sockio.c 项目: apc-llc/cernlib
int
recvul(int sock,unsigned long *ul)
{
  char buf[MAX_ULSTR + 1];

  DLOG_MSG(("recvul() : x_recv(%d)",sock));
  if (!x_recv(sock,buf,sizeof buf)) {
    DLOG_ERROR(("recvul()"));
    return 0;
  }
  *ul = strtoul(buf,(char **)0,10);
  DLOG_MSG(("recvul() : buf=%s *ul=%lu",buf,*ul));
  return 1;
}
示例#5
0
static
void run_pp_server(void)
{
	if (!arg_pscom) {
		while (1) {
			x_recv();
			x_send(8); // ToDo:
		}
	} else {
		while (1) {
			int len;
			len = x_recv_pscom();
			x_send_pscom(len);
		}
	}
}
示例#6
0
static
int run_pp_c(int msize, int loops)
{
	int cnt;
	if (!arg_pscom) {
		for (cnt = 0; cnt < loops; cnt++) {
			x_send(msize);
			x_recv();
		}
	} else {
		for (cnt = 0; cnt < loops; cnt++) {
			int len;
			x_send_pscom(msize);
			len = x_recv_pscom();
			assert(len == msize);
		}
	}
	return 0;
}
示例#7
0
文件: sockio.c 项目: apc-llc/cernlib
/*
 * Receives string from network (length info comes first) and
 * returns an allocated buffer containing the string and its length
 * (len will be in the same form as when returned by strlen(), i.e.,
 * excluding the null terminator).  If len is zero, the string
 * was empty in which case strorage will not be allocated
 * and the actual x_recv() for the string is not performed.
 * If the string buffer passed to recvstr() was not empty (i.e.,
 * the pointer to it was not null) it is freed first.
 */
int
recvstr(int sock,char **s,size_t *len)
{
  unsigned long ultmp;

  DLOG_MSG(("recvstr() : recvul(%d)",sock));
  if (!recvul(sock,&ultmp))
    return 0;
  *len = (size_t)ultmp;
  if (*s) x_free(*s);
  if (*len > 0) {
    DLOG_MSG(("recvstr() : x_recv(%d)",sock));
    *s = (char *)x_malloc(*len + 1);
    if (!x_recv(sock,*s,*len)) {
      DLOG_ERROR(("recvstr()"));
      return 0;
    }
    DLOG_MSG(("recvstr() : *s=%s",*s));
  }
  else
    *s = (char *)0;
  return 1;
}