コード例 #1
0
ファイル: sockcall.c プロジェクト: fjanssen/Car2X
int
t_recv (long s, 
   char *   buf,
   int   len, 
   int   flag)
{
#ifdef SOCKDEBUG
   char logbuf[10];
#endif
   struct socket *   so;
   int   err;
   int   sendlen = len;

   so = LONG2SO(s);
#ifdef SOC_CHECK_ALWAYS
   SOC_CHECK(so);
#endif
   if ((so->so_state & SO_IO_OK) != SS_ISCONNECTED)
   {
      so->so_error = EPIPE;
#ifdef SOCKDEBUG
      sprintf(logbuf, "t_recv: %d", so->so_error);
      glog_with_type(LOG_TYPE_DEBUG, logbuf, 1);
#endif
      return SOCKET_ERROR;
   }
   so->so_error = 0;

   LOCK_NET_RESOURCE(NET_RESID);
   IN_PROFILER(PF_TCP, PF_ENTRY);        /* measure time in TCP */
   INET_TRACE (INETM_IO, ("INET:recv: so %x, len %d\n", so, len));
   err = soreceive(so, NULL, buf, &len, flag);
   IN_PROFILER(PF_TCP, PF_EXIT);        /* measure time in TCP */
   UNLOCK_NET_RESOURCE(NET_RESID);

   if(err)
   {
      so->so_error = err;
#ifdef SOCKDEBUG
      sprintf(logbuf, "t_recv: %d", so->so_error);
      glog_with_type(LOG_TYPE_DEBUG, logbuf, 1);
#endif
      return SOCKET_ERROR;
   }

   /* return bytes we sent - the amount we wanted to send minus
    * the amount left in the buffer.
    */
   return (sendlen - len);
}
コード例 #2
0
ファイル: sockcall.c プロジェクト: fjanssen/Car2X
long
t_accept(long s, 
   struct sockaddr * addr,
   int * addrlen)
{
#ifdef SOCKDEBUG
   char logbuf[10];
#endif
   struct socket *   so;
   struct mbuf *  nam;

   so = LONG2SO(s);
   SOC_CHECK(so);
   DOMAIN_CHECK(so, *addrlen);

   so->so_error = 0;
   INET_TRACE (INETM_SOCKET,
      ("INET:accept:so %x so_qlen %d so_state %x\n", so, so->so_qlen, so->so_state));
   if ((so->so_options & SO_ACCEPTCONN) == 0)
   {
      so->so_error = EINVAL;
#ifdef SOCKDEBUG
      sprintf(logbuf, "t_accept[%d]: %d", __LINE__, so->so_error);
      glog_with_type(LOG_TYPE_DEBUG, logbuf, 1);
#endif
      return SOCKET_ERROR;
   }
   if ((so->so_state & SS_NBIO) && so->so_qlen == 0)
   {
      so->so_error = EWOULDBLOCK;
#ifdef SOCKDEBUG
      sprintf(logbuf, "t_accept[%d]: %d", __LINE__, so->so_error);
      glog_with_type(LOG_TYPE_DEBUG, logbuf, 1);
#endif
      return SOCKET_ERROR;
   }
   LOCK_NET_RESOURCE(NET_RESID);
   while (so->so_qlen == 0 && so->so_error == 0)
   {
      if (so->so_state & SS_CANTRCVMORE)
      {
         so->so_error = ECONNABORTED;
         UNLOCK_NET_RESOURCE(NET_RESID);
         return SOCKET_ERROR;
      }
      tcp_sleep ((char *)&so->so_timeo);
   }
   if (so->so_error)
   {
#ifdef SOCKDEBUG
      sprintf(logbuf, "t_accept[%d]: %d", __LINE__, so->so_error);
      glog_with_type(LOG_TYPE_DEBUG, logbuf, 1);
#endif
      UNLOCK_NET_RESOURCE(NET_RESID);
      return SOCKET_ERROR;
   }
   nam = m_getwithdata (MT_SONAME, sizeof (struct sockaddr));
   if (nam == NULL) 
   {
      UNLOCK_NET_RESOURCE(NET_RESID);
      so->so_error = ENOMEM;
#ifdef SOCKDEBUG
      sprintf(logbuf, "t_accept[%d]: %d", __LINE__, so->so_error);
      glog_with_type(LOG_TYPE_DEBUG, logbuf, 1);
#endif
      return SOCKET_ERROR;
   }
   { 
      struct socket *aso = so->so_q;
      if (soqremque (aso, 1) == 0)
         panic("accept");
      so = aso;
   }
   (void)soaccept (so, nam);
#ifdef TRACE_DEBUG
   { struct sockaddr_in *sin;
      sin = mtod(nam, struct sockaddr_in *);
      INET_TRACE (INETM_SOCKET, ("INET:accept:done so %lx port %d addr %lx\n",
       so, sin->sin_port, sin->sin_addr.s_addr));
   }
#endif   /* TRACE_INET */
   /* return the addressing info in the passed structure */
   if (addr != NULL)
      MEMCPY(addr, nam->m_data, *addrlen);
   m_freem (nam);
   UNLOCK_NET_RESOURCE(NET_RESID);
   SOC_RANGE(so);
   return SO2LONG(so);
}
コード例 #3
0
ファイル: iniche_log.c プロジェクト: ECE492W2014G4/G4Capstone
int glog_app(void * pio)
{
   int i;
   char *buf;
   buf = (char *) ((GEN_IO)pio)->inbuf;
   ns_printf(pio,"%s\n", buf);
   if(p_global_log == NULL)
   {
      p_global_log = (log_data_t *) LOG_MALLOC(sizeof(log_data_t));
      if(p_global_log == NULL)
      {
         ns_printf(pio,"glog_app: LOG_MALLOC() failed\n");
         return(-1);
      }
      memset(p_global_log, 0, sizeof(log_data_t));      
      p_global_log->log_level = DEFAULT_LOG_LEVEL;
#ifdef USE_LOGFILE
      strcpy(p_global_log->log_fname, LOG_FILE_DEFAULT);
#endif
   }
   if(p_global_log->argv)
   {
      LOG_FREE(p_global_log->argv);
      p_global_log->argv = NULL;
   }
   p_global_log->argv = parse_args(buf, GLOG_MAX_ARGC, &(p_global_log->argc));
   if(p_global_log->argv == NULL)
   {
      ns_printf(pio, "parse_args() failed for %s\n", buf);
      return(-1);
   }   
#if 0
   for(i = 0; i < p_global_log->argc; i++)
   {
      ns_printf(pio, "%s ", p_global_log->argv[i]);
   }
   ns_printf(pio,"\n");
#endif
   if(glog_process_args(p_global_log))
   {
      ns_printf(pio, "glog_process_args() failed\n");
      return(-1);
   }
   /* Here now we can configure our log app */
   if(p_global_log->stop_flag)
   {
      glog_with_type(LOG_TYPE_INFO, "INICHE LOG stopped", 1);
      iniche_free_log(&p_global_log);
      return(0);
   }
   
   if(p_global_log->start_flag)
   {
#ifdef USE_LOGFILE
      if(iniche_create_log(&p_global_log, p_global_log->log_level, p_global_log->log_fname, pio))
#else
      if(iniche_create_log(&p_global_log, p_global_log->log_level, NULL, pio))
#endif
      {
         ns_printf(pio,"iniche_create_log() failed\n");
      }
      else
      {
         ns_printf(pio,"starting glog:\n");
         glog_with_type(LOG_TYPE_INFO, "INICHE LOG initialized", 1);
      }
      p_global_log->start_flag = 0;
   }
   return 0;
}