日期:2014-05-16  浏览次数:20903 次

apr实现udp协议的一个问题
我修改这个服务端的范例代码想把tcp协议改成udp协议。我把里面的apr_socket_create这里用apr_socket_create(&s, sa->family, SOCK_DGRAM, APR_PROTO_UDP, mp);也就是用udp协议传输,结果rv = apr_socket_listen(s, DEF_SOCKET_BACKLOG);这里rv就不是success了。这是怎么回事呢,求助?
或者请给我一个用apr实现udp协议的范例让我看一下

/**
 * apr tutorial sample code
 * http://dev.ariel-networks.com/apr/
 */
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#include <stdio.h>
#include <assert.h>

#include <apr_general.h>
#include <apr_file_io.h>
#include <apr_strings.h>
#include <apr_network_io.h>

/* default listen port number */
#define DEF_LISTEN_PORT 8081

/* default socket backlog number. SOMAXCONN is a system default value */
#define DEF_SOCKET_BACKLOG SOMAXCONN

/* default buffer size */
#define BUFSIZE 4096

/* useful macro */
#define CRLF_STR "\r\n"

static apr_status_t do_listen(apr_socket_t **sock, apr_pool_t *mp);
static int do_serv_task(apr_socket_t *serv_sock, apr_pool_t *mp);

/**
 * Network server sample code
 * Just response to an HTTP GET request, but this is not a true HTTP server.
 * For example, you can test this program as follows,
 *  $ wget http://localhost:8081/etc/hosts
 * @remark Error checks omitted
 */
int main(int argc, const char *argv[])
{
    apr_status_t rv;
    apr_pool_t *mp;
    apr_socket_t *s;/* listening socket */

    apr_initialize();
    apr_pool_create(&mp, NULL);

    rv = do_listen(&s, mp);
    if (rv != APR_SUCCESS) {
        goto error;
    }

    while (1) {
        apr_socket_t *ns;/* accepted socket */
    
        rv = apr_socket_accept(&ns, s, mp);
        if (rv != APR_SUCCESS) {
            goto error;
        }
        /* it is a good idea to specify socket options for the newly accepted socket explicitly */
        apr_socket_opt_set(ns, APR_SO_NONBLOCK, 0);
        apr_socket_timeout_set(ns, -1);
        
        if (!do_serv_task(ns, mp)) {
            goto error;
        }
        apr_socket