Ashley
Ashley

Reputation: 441

'SO_USELOOPBACK' was not declared in this scope

I am checking socket options and I got this error when I compile. I tried to google it and it looks like no one has encountered this problem before.

#include <netinet/tcp.h> 
#include <stdio.h> 
#include <sys/socket.h> 
#include <arpa/inet.h> 
#include <unistd.h> 
#include <string.h> 
#include <sys/types.h>
#include <netinet/in.h>
#include <netdb.h> 
#include <stdlib.h> 

static char *sock_str_flag(union val *, int);
struct sock_opts {
    const char *opt_str;
    int opt_level;
    int opt_name;
    char *(*opt_val_str)(union val *, int);
}sock_opts[] = {
{ "SO_USELOOPBACK", SOL_SOCKET, SO_USELOOPBACK, sock_str_flag } //this is the error
};

Upvotes: 1

Views: 717

Answers (1)

m0hithreddy
m0hithreddy

Reputation: 1839

The socket option SO_USELOOPBACK is not a POSIX standard. The man page setsockopt() describes the nature of SO_USELOOPBACK in detail.

  • The SO_USELOOPBACK is a [Digital] standard. Text paragraphs preceded by [Digital] document features that are included in the DIGITAL UNIX software but are not currently specified by any standard that applies to the interface being described. Use these features when source code portability across multiple UNIX platforms is less important than the capabilities that the features provide.

For portability, you need to have ifdef checks.

struct sock_opts {
    const char *opt_str;
    int opt_level;
    int opt_name;
    char *(*opt_val_str)(union val *, int);
}sock_opts[] = {
        /* .... */

#ifdef SO_USELOOPBACK
        {"SO_USELOOPBACK", SOL_SOCKET, SO_USELOOPBACK, sock_str_flag }
#endif

        /* .... */
};

Upvotes: 2

Related Questions