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); }
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); }
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; }