示例#1
0
文件: socket.c 项目: andreax79/monit
Socket_T socket_create_a(int socket, const char *remote_host,
                         int port, void *sslserver) {
  
  Socket_T S;
  
  ASSERT(socket>=0);
  ASSERT(remote_host);
  
  NEW(S);
  S->length= 0;
  S->offset= 0;
  S->port= port;
  S->socket= socket;
  S->type= SOCK_STREAM;
  S->timeout= NET_TIMEOUT;
  S->host= xstrdup(remote_host);
  S->connection_type= TYPE_ACCEPT;
  
  if(sslserver) {
    S->sslserver= sslserver;
    if(! (S->ssl= insert_accepted_ssl_socket(S->sslserver))) {
      goto ssl_error;
    }
    if(! embed_accepted_ssl_socket(S->ssl, S->socket)) {
      goto ssl_error;
    }
  }
  
  return S;
  
ssl_error:
    socket_free(&S);
  return NULL;
  
}
示例#2
0
/**
 * Do "accept" for a ssl server socket
 * @param ssl ssl connection
 * @return the ssl_connection of the socket, NULL in case of an error
 */
ssl_connection *accept_ssl_socket(ssl_server_connection *ssl_server) {

#ifdef HAVE_OPENSSL

    int no_crypt_socket;
    int len= sizeof(struct sockaddr_in);
    struct sockaddr_in in;

    ASSERT(ssl_server);

    no_crypt_socket= accept(ssl_server->server_socket, (struct sockaddr*)&in,
                            &len);

    if(no_crypt_socket >= 0) {

        ssl_connection *ssl = insert_accepted_ssl_socket(ssl_server);

        if(ssl == NULL) {

            return NULL;

        }

        if(embed_accepted_ssl_socket(ssl, no_crypt_socket)) {

            return ssl;

        } else {

            close_accepted_ssl_socket(ssl_server, ssl);
            return NULL;

        }

    } else {

        return NULL;

    }

#else

    return NULL;

#endif

}