本文整理汇总了C++中sock_setsockopt函数的典型用法代码示例。如果您正苦于以下问题:C++ sock_setsockopt函数的具体用法?C++ sock_setsockopt怎么用?C++ sock_setsockopt使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了sock_setsockopt函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: syslog
void *app_glue_create_socket(int family,int type)
{
struct timeval tv;
struct socket *sock = NULL;
if(sock_create_kern(family,type,0,&sock)) {
syslog(LOG_ERR,"cannot create socket %s %d\n",__FILE__,__LINE__);
return NULL;
}
tv.tv_sec = -1;
tv.tv_usec = 0;
if(sock_setsockopt(sock,SOL_SOCKET,SO_RCVTIMEO,(char *)&tv,sizeof(tv))) {
syslog(LOG_ERR,"%s %d cannot set notimeout option\n",__FILE__,__LINE__);
}
tv.tv_sec = -1;
tv.tv_usec = 0;
if(sock_setsockopt(sock,SOL_SOCKET,SO_SNDTIMEO,(char *)&tv,sizeof(tv))) {
syslog(LOG_ERR,"%s %d cannot set notimeout option\n",__FILE__,__LINE__);
}
if(type != SOCK_STREAM) {
if(sock->sk) {
sock_reset_flag(sock->sk,SOCK_USE_WRITE_QUEUE);
sock->sk->sk_data_ready = app_glue_sock_readable;
sock->sk->sk_write_space = app_glue_sock_write_space;
app_glue_sock_write_space(sock->sk);
}
}
return sock;
}
示例2: sock_tcp_server
/*
* sock_tcp_server()
* Initialize a tcp server socket. On success, a valid socket number will return.
*/
int sock_tcp_server(const char *hostname, int port)
{
int oldfl = 0;
int sock;
/* create a socket */
if ((sock = sock_create("tcp")) < 0)
net_error("initialize server socket failed\n");
/* set it to non-blocking operation */
oldfl = fcntl(sock, F_GETFL, 0);
if (!(oldfl & O_NONBLOCK))
fcntl(sock, F_SETFL, oldfl | O_NONBLOCK);
/* setup for a fast restart to avoid bind addr in use errors */
sock_setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, 1);
/* bind it to the appropriate port */
if ((sock_bind(sock, hostname, port)) == -1)
return -1;
/* go ahead and listen to the socket */
if (listen(sock, TCP_BACKLOG) != 0)
return -1;
return sock;
}
示例3: ksetsockopt
int ksetsockopt(ksocket_t socket, int level, int optname, void *optval, int optlen)
{
struct socket *sk;
int ret;
#ifndef KSOCKET_ADDR_SAFE
mm_segment_t old_fs;
#endif
sk = (struct socket *)socket;
#ifndef KSOCKET_ADDR_SAFE
old_fs = get_fs();
set_fs(KERNEL_DS);
#endif
if (level == SOL_SOCKET)
ret = sock_setsockopt(sk, level, optname, optval, optlen);
else
ret = sk->ops->setsockopt(sk, level, optname, optval, optlen);
#ifndef KSOCKET_ADDR_SAFE
set_fs(old_fs);
#endif
return ret;
}
示例4: libcfs_sock_create
static int
libcfs_sock_create (cfs_socket_t **sockp, int *fatal,
__u32 local_ip, int local_port)
{
struct sockaddr_in locaddr;
cfs_socket_t *sock;
int option;
int optlen;
int rc;
/* All errors are fatal except bind failure if the port is in use */
*fatal = 1;
sock = _MALLOC(sizeof(cfs_socket_t), M_TEMP, M_WAITOK|M_ZERO);
if (!sock) {
CERROR("Can't allocate cfs_socket.\n");
return -ENOMEM;
}
*sockp = sock;
sock->s_magic = CFS_SOCK_MAGIC;
rc = -sock_socket(PF_INET, SOCK_STREAM, 0,
libcfs_sock_upcall, sock, &C2B_SOCK(sock));
if (rc != 0)
goto out;
option = 1;
optlen = sizeof(option);
rc = -sock_setsockopt(C2B_SOCK(sock), SOL_SOCKET,
SO_REUSEADDR, &option, optlen);
if (rc != 0)
goto out;
/* can't specify a local port without a local IP */
LASSERT (local_ip == 0 || local_port != 0);
if (local_ip != 0 || local_port != 0) {
bzero (&locaddr, sizeof (locaddr));
locaddr.sin_len = sizeof(struct sockaddr_in);
locaddr.sin_family = AF_INET;
locaddr.sin_port = htons (local_port);
locaddr.sin_addr.s_addr = (local_ip != 0) ? htonl(local_ip) : INADDR_ANY;
rc = -sock_bind(C2B_SOCK(sock), (struct sockaddr *)&locaddr);
if (rc == -EADDRINUSE) {
CDEBUG(D_NET, "Port %d already in use\n", local_port);
*fatal = 0;
goto out;
}
if (rc != 0) {
CERROR("Error trying to bind to port %d: %d\n",
local_port, rc);
goto out;
}
}
return 0;
out:
if (C2B_SOCK(sock) != NULL)
sock_close(C2B_SOCK(sock));
FREE(sock, M_TEMP);
return rc;
}
示例5: setup_tcp
static int setup_tcp(void)
{
struct sockaddr_in saddr = {};
mm_segment_t fs;
int buffersize = PAGE_SIZE;
int ret;
ret = sock_create_kern(AF_INET, SOCK_STREAM, IPPROTO_TCP, &server);
if (unlikely(ret < 0)) {
DBG("error creating socket");
return ret;
}
saddr.sin_family = AF_INET;
saddr.sin_port = htons(tcp_port);
saddr.sin_addr.s_addr = INADDR_ANY;
fs = get_fs();
set_fs(KERNEL_DS);
ret = sock_setsockopt(server, SOL_SOCKET, SO_SNDBUF,
(void *)&buffersize, sizeof(buffersize));
set_fs(fs);
if (unlikely(ret < 0)) {
DBG("error setting buffsize");
goto out_err;
}
ret = server->ops->bind(server, (struct sockaddr *)&saddr,
sizeof(saddr));
if (unlikely(ret < 0)) {
DBG("error binding socket");
goto out_err;
}
ret = server->ops->listen(server, 1);
if (unlikely(ret < 0)) {
DBG("error listening on socket");
goto out_err;
}
ret = sock_create_kern(PF_INET, SOCK_STREAM, IPPROTO_TCP, &client);
if (ret < 0) {
DBG("error creating accept socket");
goto out_err;
}
out:
return ret;
out_err:
server->ops->shutdown(server, 0);
server->ops->release(server);
goto out;
}
示例6: compat_sock_setsockopt
static int compat_sock_setsockopt(struct socket *sock, int level, int optname,
char __user *optval, unsigned int optlen)
{
if (optname == SO_ATTACH_FILTER)
return do_set_attach_filter(sock, level, optname,
optval, optlen);
if (optname == SO_RCVTIMEO || optname == SO_SNDTIMEO)
return do_set_sock_timeout(sock, level, optname, optval, optlen);
return sock_setsockopt(sock, level, optname, optval, optlen);
}
示例7: send
int send(struct socket *sock, struct sockaddr_in *addr, void * data, int len)
{
struct msghdr msg;
struct iovec iov;
mm_segment_t oldfs;
int size = 0;
u_int32_t space;
if (sock->sk==NULL)
return 0;
int interface=1;
if(sock_setsockopt(sock,SOL_SOCKET,SO_BROADCAST,(char *)&interface,sizeof(interface))<0)
{
printk(KERN_WARNING "No Broadcast");
}
iov.iov_base = (char *) data;
iov.iov_len = len;
memset(&my_work->addr, 0, sizeof(struct sockaddr));
memset(&my_work->addr_send, 0, sizeof(struct sockaddr));
my_work->addr_send.sin_family = AF_INET;
//my_work->addr_send.sin_addr.s_addr = htonl(INADDR_SEND);
my_work->addr_send.sin_addr.s_addr = in_aton("255.255.255.255");
//sock->sk->sk_flags.SOCK_BROADCAST=1;
my_work->addr_send.sin_port = htons(CONNECT_PORT);
msg.msg_flags = 0;
msg.msg_name = (void *) & my_work->addr_send;
msg.msg_namelen = sizeof(struct sockaddr_in);
msg.msg_control = NULL;
msg.msg_controllen = 0;
msg.msg_iov = &iov;
msg.msg_iovlen = 1;
msg.msg_control = NULL;
if((space = sock_wspace(sock->sk))<len)
{
printk(KERN_INFO "ERROR");
return -ENOMEM;
}
sock_set_flag(my_work->sock_send,SOCK_BROADCAST);
//sock->sk->broadcast=1;
oldfs = get_fs();
set_fs(KERNEL_DS);
size = sock_sendmsg(sock,&msg,len);
if(size<0)
printk(KERN_WARNING "ERROR SEND MSG:%d:",size);
set_fs(oldfs);
// printk(KERN_INFO MODULE_NAME":Message Sent from new program");
return size;
}
示例8: inet_setsockopt
static int inet_setsockopt(struct socket *sock, int level, int optname,
char *optval, int optlen)
{
struct sock *sk = (struct sock *) sock->data;
if (level == SOL_SOCKET)
return sock_setsockopt(sk,level,optname,optval,optlen);
if (sk->prot->setsockopt==NULL)
return(-EOPNOTSUPP);
else
return sk->prot->setsockopt(sk,level,optname,optval,optlen);
}
示例9: sim_sock_setsockopt
int sim_sock_setsockopt (struct SimSocket *socket, int level, int optname,
const void *optval, int optlen)
{
struct socket *sock = (struct socket *)socket;
char *coptval = (char *)optval;
int err;
if (level == SOL_SOCKET)
err = sock_setsockopt(sock, level, optname, coptval, optlen);
else
err = sock->ops->setsockopt(sock, level, optname, coptval, optlen);
return err;
}
示例10: _omni_sock_setsockopt
static int _omni_sock_setsockopt(struct socket *sock, int level, int optname, char *optval, unsigned int optlen)
{
mm_segment_t oldfs = get_fs();
char __user *uoptval;
int err;
uoptval = (char __user __force *) optval;
set_fs(KERNEL_DS);
if (level == SOL_SOCKET)
err = sock_setsockopt(sock, level, optname, uoptval, optlen);
else
err = sock->ops->setsockopt(sock, level, optname, uoptval, optlen);
set_fs(oldfs);
return err;
}
示例11: do_set_attach_filter
static int do_set_attach_filter(struct socket *sock, int level, int optname,
char __user *optval, unsigned int optlen)
{
struct compat_sock_fprog __user *fprog32 = (struct compat_sock_fprog __user *)optval;
struct sock_fprog __user *kfprog = compat_alloc_user_space(sizeof(struct sock_fprog));
compat_uptr_t ptr;
u16 len;
if (!access_ok(VERIFY_READ, fprog32, sizeof(*fprog32)) ||
!access_ok(VERIFY_WRITE, kfprog, sizeof(struct sock_fprog)) ||
__get_user(len, &fprog32->len) ||
__get_user(ptr, &fprog32->filter) ||
__put_user(len, &kfprog->len) ||
__put_user(compat_ptr(ptr), &kfprog->filter))
return -EFAULT;
return sock_setsockopt(sock, level, optname, (char __user *)kfprog,
sizeof(struct sock_fprog));
}
示例12: do_set_sock_timeout
static int do_set_sock_timeout(struct socket *sock, int level,
int optname, char __user *optval, unsigned int optlen)
{
struct compat_timeval __user *up = (struct compat_timeval __user *)optval;
struct timeval ktime;
mm_segment_t old_fs;
int err;
if (optlen < sizeof(*up))
return -EINVAL;
if (!access_ok(VERIFY_READ, up, sizeof(*up)) ||
__get_user(ktime.tv_sec, &up->tv_sec) ||
__get_user(ktime.tv_usec, &up->tv_usec))
return -EFAULT;
old_fs = get_fs();
set_fs(KERNEL_DS);
err = sock_setsockopt(sock, level, optname, (char *)&ktime, sizeof(ktime));
set_fs(old_fs);
return err;
}
示例13: setup_tcp
int setup_tcp() {
struct sockaddr_in saddr;
int r;
mm_segment_t fs;
int buffsize = PAGE_SIZE;
#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,5)
r = sock_create_kern(AF_INET, SOCK_STREAM, IPPROTO_TCP, &control);
#else
r = sock_create(AF_INET, SOCK_STREAM, IPPROTO_TCP, &control);
#endif
if (r < 0) {
DBG("Error creating control socket");
return r;
}
memset(&saddr, 0, sizeof(saddr));
saddr.sin_family = AF_INET;
saddr.sin_port = htons(port);
if (localhostonly) {
saddr.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
} else {
saddr.sin_addr.s_addr = htonl(INADDR_ANY);
}
fs = get_fs();
set_fs(KERNEL_DS);
sock_setsockopt(control, SOL_SOCKET, SO_SNDBUF, (void *) &buffsize, sizeof (int));
set_fs(fs);
if (r < 0) {
DBG("Error setting buffsize %d", r);
return r;
}
r = control->ops->bind(control,(struct sockaddr*) &saddr,sizeof(saddr));
if (r < 0) {
DBG("Error binding control socket");
return r;
}
r = control->ops->listen(control,1);
if (r) {
DBG("Error listening on socket");
return r;
}
#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,5)
r = sock_create_kern(PF_INET, SOCK_STREAM, IPPROTO_TCP, &accept);
#else
r = sock_create(PF_INET, SOCK_STREAM, IPPROTO_TCP, &accept);
#endif
if (r < 0) {
DBG("Error creating accept socket");
return r;
}
r = accept->ops->accept(control,accept,0);
if (r < 0) {
DBG("Error accepting socket");
return r;
}
return 0;
}
示例14: libcfs_sock_read
int
libcfs_sock_read (cfs_socket_t *sock, void *buffer, int nob, int timeout)
{
size_t rcvlen;
int rc;
cfs_duration_t to = cfs_time_seconds(timeout);
cfs_time_t then;
struct timeval tv;
LASSERT(nob > 0);
for (;;) {
struct iovec iov = {
.iov_base = buffer,
.iov_len = nob
};
struct msghdr msg = {
.msg_name = NULL,
.msg_namelen = 0,
.msg_iov = &iov,
.msg_iovlen = 1,
.msg_control = NULL,
.msg_controllen = 0,
.msg_flags = 0,
};
cfs_duration_usec(to, &tv);
rc = -sock_setsockopt(C2B_SOCK(sock), SOL_SOCKET, SO_RCVTIMEO,
&tv, sizeof(tv));
if (rc != 0) {
CERROR("Can't set socket recv timeout "
"%ld.%06d: %d\n",
(long)tv.tv_sec, (int)tv.tv_usec, rc);
return rc;
}
then = cfs_time_current();
rc = -sock_receive(C2B_SOCK(sock), &msg, 0, &rcvlen);
to -= cfs_time_current() - then;
if (rc != 0 && rc != -EWOULDBLOCK)
return rc;
if (rcvlen == nob)
return 0;
if (to <= 0)
return -EAGAIN;
buffer = ((char *)buffer) + rcvlen;
nob -= rcvlen;
}
return 0;
}
int
libcfs_sock_write (cfs_socket_t *sock, void *buffer, int nob, int timeout)
{
size_t sndlen;
int rc;
cfs_duration_t to = cfs_time_seconds(timeout);
cfs_time_t then;
struct timeval tv;
LASSERT(nob > 0);
for (;;) {
struct iovec iov = {
.iov_base = buffer,
.iov_len = nob
};
struct msghdr msg = {
.msg_name = NULL,
.msg_namelen = 0,
.msg_iov = &iov,
.msg_iovlen = 1,
.msg_control = NULL,
.msg_controllen = 0,
.msg_flags = (timeout == 0) ? MSG_DONTWAIT : 0,
};
if (timeout != 0) {
cfs_duration_usec(to, &tv);
rc = -sock_setsockopt(C2B_SOCK(sock), SOL_SOCKET, SO_SNDTIMEO,
&tv, sizeof(tv));
if (rc != 0) {
CERROR("Can't set socket send timeout "
"%ld.%06d: %d\n",
(long)tv.tv_sec, (int)tv.tv_usec, rc);
return rc;
}
}
then = cfs_time_current();
rc = -sock_send(C2B_SOCK(sock), &msg,
((timeout == 0) ? MSG_DONTWAIT : 0), &sndlen);
to -= cfs_time_current() - then;
if (rc != 0 && rc != -EWOULDBLOCK)
return rc;
if (sndlen == nob)
return 0;
//.........这里部分代码省略.........
示例15: xi_lpx_connect
int xi_lpx_connect(xi_socket_t *oso, struct sockaddr_lpx daddr, struct sockaddr_lpx saddr, int timeoutsec)
{
xi_socket_t so = NULL;
errno_t error;
struct timeval timeout;
#ifndef __KPI_SOCKET__
struct sockopt sopt;
boolean_t funnel_state;
#endif
*oso = NULL;
error = xi_sock_socket(AF_LPX, SOCK_STREAM, 0, NULL, NULL, &so);
if(error) {
DebugPrint(1, false, "socreate error %d\n", error);
goto bad;
}
error = xi_sock_bind(so, (struct sockaddr *) &saddr);
if(error) {
DebugPrint(1, false, "xi_lpx_connect: sobind error\n");
goto bad;
}
#if 0
DebugPrint(4, false, "xi_lpx_connect to ");
for(i=0; i<6; i++)
DebugPrint(4, false, "02x ", daddr.slpx_node[i]);
#endif
error = xi_sock_connect(so, (struct sockaddr *)&daddr, 0);
if(error) {
DebugPrint(4, false, "soconnect error %d\n", error);
goto bad;
}
#ifndef __KPI_SOCKET__
do {
// struct sockaddr_lpx sin;
int s;
funnel_state = thread_funnel_set(network_flock, TRUE);
s = splnet();
while ((so->so_state & SS_ISCONNECTING) && so->so_error == 0) {
// IOLog("before sleep\n");
(void) tsleep((caddr_t)&so->so_timeo, PSOCK | PCATCH, "xiscsicon", 0);
// IOLog("after sleep\n");
break;
}
// IOLog("so->so_error = %d\n", so->so_error);
if (so->so_error) {
error = so->so_error;
so->so_error = 0;
splx(s);
goto bad;
}
splx(s);
(void) thread_funnel_set(network_flock, FALSE);
} while(0);
#endif // __KPI_SOCKET__
*oso = so;
// Set Read Timeout.
timeout.tv_sec = timeoutsec;
timeout.tv_usec = 0;
#ifdef __KPI_SOCKET__
error = sock_setsockopt(
so,
SOL_SOCKET,
SO_RCVTIMEO,
&timeout,
sizeof(struct timeval)
);
#else
sopt.sopt_dir = SOPT_SET;
sopt.sopt_level = SOL_SOCKET;
sopt.sopt_name = SO_RCVTIMEO;
sopt.sopt_val = &timeout;
sopt.sopt_valsize = sizeof(struct timeval);
sopt.sopt_p = current_proc();
funnel_state = thread_funnel_set(network_flock, TRUE);
error = sosetopt(so, &sopt);
(void) thread_funnel_set(network_flock, FALSE);
#endif
if(error) {
DebugPrint(1, false, "xi_lpx_connect: Can't set Receive Time out. error %d\n", error);
goto bad;
}
//.........这里部分代码省略.........