本文整理汇总了C++中sock_setsockopt函数的典型用法代码示例。如果您正苦于以下问题:C++ sock_setsockopt函数的具体用法?C++ sock_setsockopt怎么用?C++ sock_setsockopt使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了sock_setsockopt函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的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;
}
开发者ID:jmmcgee,项目名称:ipaugenblick,代码行数:28,代码来源:app_glue.c
示例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;
}
开发者ID:mimirswell,项目名称:hqemu,代码行数:31,代码来源:sock.c
示例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;
}
开发者ID:jangsoopark,项目名称:Firewall-1,代码行数:26,代码来源:ksocket.c
示例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;
}
开发者ID:DCteam,项目名称:lustre,代码行数:60,代码来源:darwin-tcpip.c
示例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;
}
开发者ID:arighi,项目名称:android-kernel-programming,代码行数:55,代码来源:memdump.c
示例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);
}
开发者ID:AdrianHuang,项目名称:linux-3.8.13,代码行数:11,代码来源:compat.c
示例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;
}
开发者ID:praveenmg,项目名称:ADHOC-HELLO,代码行数:54,代码来源:send.c
示例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);
}
开发者ID:abbshr,项目名称:Notes-HIT_computer_network,代码行数:11,代码来源:af_inet.c
示例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;
}
开发者ID:ckw1375,项目名称:mptcp,代码行数:12,代码来源:sim-socket.c
示例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;
}
开发者ID:passedaway,项目名称:module,代码行数:16,代码来源:omni_socket.c
示例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));
}
开发者ID:AdrianHuang,项目名称:linux-3.8.13,代码行数:19,代码来源:compat.c
示例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;
}
开发者ID:AdrianHuang,项目名称:linux-3.8.13,代码行数:21,代码来源:compat.c
示例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;
}
开发者ID:renethio,项目名称:LiME,代码行数:73,代码来源:tcp.c
示例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;
//.........这里部分代码省略.........
开发者ID:DCteam,项目名称:lustre,代码行数:101,代码来源:darwin-tcpip.c
示例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;
}
//.........这里部分代码省略.........
开发者ID:dansdrivers,项目名称:ndas4mac,代码行数:101,代码来源:LanScsiSocket.c
示例16: krpc_call
/*
* Do a remote procedure call (RPC) and wait for its reply.
* If from_p is non-null, then we are doing broadcast, and
* the address from whence the response came is saved there.
*/
int
krpc_call(
struct sockaddr_in *sa,
u_int sotype, u_int prog, u_int vers, u_int func,
mbuf_t *data, /* input/output */
struct sockaddr_in *from_p) /* output */
{
socket_t so;
struct sockaddr_in *sin;
mbuf_t m, nam, mhead;
struct rpc_call *call;
struct rpc_reply *reply;
int error, timo, secs;
size_t len;
static u_int32_t xid = ~0xFF;
u_int16_t tport;
size_t maxpacket = 1<<16;
/*
* Validate address family.
* Sorry, this is INET specific...
*/
if (sa->sin_family != AF_INET)
return (EAFNOSUPPORT);
/* Free at end if not null. */
nam = mhead = NULL;
/*
* Create socket and set its recieve timeout.
*/
if ((error = sock_socket(AF_INET, sotype, 0, 0, 0, &so)))
goto out1;
{
struct timeval tv;
tv.tv_sec = 1;
tv.tv_usec = 0;
if ((error = sock_setsockopt(so, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv))))
goto out;
}
/*
* Enable broadcast if necessary.
*/
if (from_p && (sotype == SOCK_DGRAM)) {
int on = 1;
if ((error = sock_setsockopt(so, SOL_SOCKET, SO_BROADCAST, &on, sizeof(on))))
goto out;
}
/*
* Bind the local endpoint to a reserved port,
* because some NFS servers refuse requests from
* non-reserved (non-privileged) ports.
*/
if ((error = mbuf_get(MBUF_WAITOK, MBUF_TYPE_SONAME, &m)))
goto out;
sin = mbuf_data(m);
bzero(sin, sizeof(*sin));
mbuf_setlen(m, sizeof(*sin));
sin->sin_len = sizeof(*sin);
sin->sin_family = AF_INET;
sin->sin_addr.s_addr = INADDR_ANY;
tport = IPPORT_RESERVED;
do {
tport--;
sin->sin_port = htons(tport);
error = sock_bind(so, (struct sockaddr*)sin);
} while (error == EADDRINUSE &&
tport > IPPORT_RESERVED / 2);
mbuf_freem(m);
m = NULL;
if (error) {
printf("bind failed\n");
goto out;
}
/*
* Setup socket address for the server.
*/
if ((error = mbuf_get(MBUF_WAITOK, MBUF_TYPE_SONAME, &nam)))
goto out;
sin = mbuf_data(nam);
mbuf_setlen(nam, sa->sin_len);
bcopy((caddr_t)sa, (caddr_t)sin, sa->sin_len);
if (sotype == SOCK_STREAM) {
struct timeval tv;
tv.tv_sec = 60;
tv.tv_usec = 0;
//.........这里部分代码省略.........
开发者ID:argp,项目名称:xnu,代码行数:101,代码来源:krpc_subr.c
示例17: pfq_setsockopt
//.........这里部分代码省略.........
CHECK_GROUP_ACCES(so->id, tmp.gid, "group computation");
if (copy_from_user(&psize, tmp.prog, sizeof(size_t)))
return -EFAULT;
pr_devel("[PFQ|%d] computation size: %zu\n", so->id, psize);
ucsize = sizeof(size_t) * 2 + psize * sizeof(struct pfq_functional_descr);
descr = kmalloc(ucsize, GFP_KERNEL);
if (descr == NULL) {
pr_devel("[PFQ|%d] computation: out of memory!\n", so->id);
return -ENOMEM;
}
if (copy_from_user(descr, tmp.prog, ucsize)) {
pr_devel("[PFQ|%d] computation: copy_from_user error!\n", so->id);
kfree(descr);
return -EFAULT;
}
/* print user computation */
pr_devel_computation_descr(descr);
/* ensure the correctness of the specified functional computation */
if (pfq_validate_computation_descr(descr) < 0) {
pr_devel("[PFQ|%d] invalid expression!\n", so->id);
return -EFAULT;
}
/* allocate context */
context = pfq_context_alloc(descr);
if (context == NULL) {
pr_devel("[PFQ|%d] context: alloc error!\n", so->id);
kfree(descr);
return -EFAULT;
}
/* allocate struct pfq_computation_tree */
comp = pfq_computation_alloc(descr);
if (comp == NULL) {
pr_devel("[PFQ|%d] computation: alloc error!\n", so->id);
kfree(context);
kfree(descr);
return -EFAULT;
}
/* link the functional computation */
if (pfq_computation_rtlink(descr, comp, context) < 0) {
pr_devel("[PFQ|%d] computation aborted!", so->id);
kfree(context);
kfree(descr);
kfree(comp);
return -EPERM;
}
/* print executable tree data structure */
pr_devel_computation_tree(comp);
/* exec init functions */
if (pfq_computation_init(comp) < 0) {
pr_devel("[PFQ|%d] computation initialization aborted!", so->id);
kfree(context);
kfree(descr);
kfree(comp);
return -EPERM;
}
/* set the new program */
if (pfq_set_group_prog(tmp.gid, comp, context) < 0) {
pr_devel("[PFQ|%d] set group program error!\n", so->id);
kfree(context);
kfree(descr);
kfree(comp);
return -EPERM;
}
kfree(descr);
return 0;
} break;
default:
{
found = false;
} break;
}
return found ? 0 : sock_setsockopt(sock, level, optname, optval, optlen);
}
开发者ID:prodigeni,项目名称:PFQ,代码行数:101,代码来源:pf_q-sockopt.c
示例18: pfq_setsockopt
//.........这里部分代码省略.........
return -EACCES;
}
if (copy_from_user(&psize, tmp.prog, sizeof(size_t)))
return -EFAULT;
pr_devel("[PFQ|%d] computation size: %zu\n", so->id.value, psize);
ucsize = sizeof(size_t) * 2 + psize * sizeof(struct pfq_functional_descr);
descr = kmalloc(ucsize, GFP_KERNEL);
if (descr == NULL) {
printk(KERN_INFO "[PFQ|%d] computation: out of memory!\n", so->id.value);
return -ENOMEM;
}
if (copy_from_user(descr, tmp.prog, ucsize)) {
printk(KERN_INFO "[PFQ|%d] computation: copy_from_user error!\n", so->id.value);
err = -EFAULT;
goto error;
}
/* print user computation */
pr_devel_computation_descr(descr);
/* check the correctness of computation */
if (pfq_check_computation_descr(descr) < 0) {
printk(KERN_INFO "[PFQ|%d] invalid expression!\n", so->id.value);
err = -EFAULT;
goto error;
}
/* allocate context */
context = pfq_context_alloc(descr);
if (context == NULL) {
printk(KERN_INFO "[PFQ|%d] context: alloc error!\n", so->id.value);
err = -EFAULT;
goto error;
}
/* allocate a pfq_computation_tree */
comp = pfq_computation_alloc(descr);
if (comp == NULL) {
printk(KERN_INFO "[PFQ|%d] computation: alloc error!\n", so->id.value);
err = -EFAULT;
goto error;
}
/* link functions of computation */
if (pfq_computation_rtlink(descr, comp, context) < 0) {
printk(KERN_INFO "[PFQ|%d] computation aborted!", so->id.value);
err = -EPERM;
goto error;
}
/* print executable tree data structure */
pr_devel_computation_tree(comp);
/* run init functions */
if (pfq_computation_init(comp) < 0) {
printk(KERN_INFO "[PFQ|%d] initialization of computation aborted!", so->id.value);
pfq_computation_fini(comp);
err = -EPERM;
goto error;
}
/* enable functional program */
if (pfq_set_group_prog(gid, comp, context) < 0) {
printk(KERN_INFO "[PFQ|%d] set group program error!\n", so->id.value);
err = -EPERM;
goto error;
}
kfree(descr);
return 0;
error: kfree(comp);
kfree(context);
kfree(descr);
return err;
} break;
default:
{
found = false;
} break;
}
return found ? 0 : sock_setsockopt(sock, level, optname, optval, optlen);
}
开发者ID:sethhall,项目名称:PFQ,代码行数:101,代码来源:pf_q-sockopt.c
示例19: sys_socketcall
//.........这里部分代码省略.........
get_fs_long(args+2)));
case SYS_LISTEN:
er=verify_area(VERIFY_READ, args, 2 * sizeof(long));
if(er)
return er;
return(sock_listen(get_fs_long(args+0),
get_fs_long(args+1)));
case SYS_ACCEPT:
er=verify_area(VERIFY_READ, args, 3 * sizeof(long));
if(er)
return er;
return(sock_accept(get_fs_long(args+0),
(struct sockaddr *)get_fs_long(args+1),
(int *)get_fs_long(args+2)));
case SYS_GETSOCKNAME:
er=verify_area(VERIFY_READ, args, 3 * sizeof(long));
if(er)
return er;
return(sock_getsockname(get_fs_long(args+0),
(struct sockaddr *)get_fs_long(args+1),
(int *)get_fs_long(args+2)));
case SYS_GETPEERNAME:
er=verify_area(VERIFY_READ, args, 3 * sizeof(long));
if(er)
return er;
return(sock_getpeername(get_fs_long(args+0),
(struct sockaddr *)get_fs_long(args+1),
(int *)get_fs_long(args+2)));
case SYS_SOCKETPAIR:
er=verify_area(VERIFY_READ, args, 4 * sizeof(long));
if(er)
return er;
return(sock_socketpair(get_fs_long(args+0),
get_fs_long(args+1),
get_fs_long(args+2),
(unsigned long *)get_fs_long(args+3)));
case SYS_SEND:
er=verify_area(VERIFY_READ, args, 4 * sizeof(unsigned long));
if(er)
return er;
return(sock_send(get_fs_long(args+0),
(void *)get_fs_long(args+1),
get_fs_long(args+2),
get_fs_long(args+3)));
case SYS_SENDTO:
er=verify_area(VERIFY_READ, args, 6 * sizeof(unsigned long));
if(er)
return er;
return(sock_sendto(get_fs_long(args+0),
(void *)get_fs_long(args+1),
get_fs_long(args+2),
get_fs_long(args+3),
(struct sockaddr *)get_fs_long(args+4),
get_fs_long(args+5)));
case SYS_RECV:
er=verify_area(VERIFY_READ, args, 4 * sizeof(unsigned long));
if(er)
return er;
return(sock_recv(get_fs_long(args+0),
(void *)get_fs_long(args+1),
get_fs_long(args+2),
get_fs_long(args+3)));
case SYS_RECVFROM:
er=verify_area(VERIFY_READ, args, 6 * sizeof(unsigned long));
if(er)
return er;
return(sock_recvfrom(get_fs_long(args+0),
(void *)get_fs_long(args+1),
get_fs_long(args+2),
get_fs_long(args+3),
(struct sockaddr *)get_fs_long(args+4),
(int *)get_fs_long(args+5)));
case SYS_SHUTDOWN:
er=verify_area(VERIFY_READ, args, 2* sizeof(unsigned long));
if(er)
return er;
return(sock_shutdown(get_fs_long(args+0),
get_fs_long(args+1)));
case SYS_SETSOCKOPT:
er=verify_area(VERIFY_READ, args, 5*sizeof(unsigned long));
if(er)
return er;
return(sock_setsockopt(get_fs_long(args+0),
get_fs_long(args+1),
get_fs_long(args+2),
(char *)get_fs_long(args+3),
get_fs_long(args+4)));
case SYS_GETSOCKOPT:
er=verify_area(VERIFY_READ, args, 5*sizeof(unsigned long));
if(er)
return er;
return(sock_getsockopt(get_fs_long(args+0),
get_fs_long(args+1),
get_fs_long(args+2),
(char *)get_fs_long(args+3),
(int *)get_fs_long(args+4)));
default:
return(-EINVAL);
}
}
开发者ID:wanggx,项目名称:Linux1.0,代码行数:101,代码来源:socket.c
示例20: ksocknal_lib_send_iov
//.........这里部分代码省略.........
*txmem = *rxmem = *nagle = 0;
return (-ESHUTDOWN);
}
rc = libcfs_sock_getbuf(conn->ksnc_sock, txmem, rxmem);
if (rc == 0) {
len = sizeof(*nagle);
rc = -sock_getsockopt(sock, IPPROTO_TCP, TCP_NODELAY,
nagle, &len);
}
ksocknal_connsock_decref(conn);
if (rc == 0)
*nagle = !*nagle;
else
*txmem = *rxmem = *nagle = 0;
return (rc);
}
int
ksocknal_lib_setup_sock (cfs_socket_t *sock)
{
int rc;
int option;
int keep_idle;
int keep_intvl;
int keep_count;
int do_keepalive;
socket_t so = C2B_SOCK(sock);
struct linger linger;
/* Ensure this socket aborts active sends immediately when we close
* it. */
linger.l_onoff = 0;
linger.l_linger = 0;
rc = -sock_setsockopt(so, SOL_SOCKET, SO_LINGER, &linger, sizeof(linger));
if (rc != 0) {
CERROR ("Can't set SO_LINGER: %d\n", rc);
return (rc);
}
if (!*ksocknal_tunables.ksnd_nagle) {
option = 1;
rc = -sock_setsockopt(so, IPPROTO_TCP, TCP_NODELAY, &option, sizeof(option));
if (rc != 0) {
CERROR ("Can't disable nagle: %d\n", rc);
return (rc);
}
}
rc = libcfs_sock_setbuf(sock,
*ksocknal_tunables.ksnd_tx_buffer_size,
*ksocknal_tunables.ksnd_rx_buffer_size);
if (rc != 0) {
CERROR ("Can't set buffer tx %d, rx %d buffers: %d\n",
*ksocknal_tunables.ksnd_tx_buffer_size,
*ksocknal_tunables.ksnd_rx_buffer_size, rc);
return (rc);
}
/* snapshot tunables */
keep_idle = *ksocknal_tunables.ksnd_keepalive_idle;
keep_count = *ksocknal_tunables.ksnd_keepalive_count;
keep_intvl = *ksocknal_tunables.ksnd_keepalive_intvl;
do_keepalive = (keep_idle > 0 && keep_count > 0 && keep_intvl > 0);
option = (do_keepalive ? 1 : 0);
rc = -sock_setsockopt(so, SOL_SOCKET, SO_KEEPALIVE, &option, sizeof(option));
if (rc != 0) {
CERROR ("Can't set SO_KEEPALIVE: %d\n", rc);
return (rc);
}
if (!do_keepalive)
return (rc);
rc = -sock_setsockopt(so, IPPROTO_TCP, TCP_KEEPALIVE,
&keep_idle, sizeof(keep_idle));
return (rc);
}
void
ksocknal_lib_push_conn(ksock_conn_t *conn)
{
socket_t sock;
int val = 1;
int rc;
rc = ksocknal_connsock_addref(conn);
if (rc != 0) /* being shut down */
return;
sock = C2B_SOCK(conn->ksnc_sock);
rc = -sock_setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, &val, sizeof(val));
LASSERT(rc == 0);
ksocknal_connsock_decref(conn);
return;
}
开发者ID:ORNL-TechInt,项目名称:lustre,代码行数:101,代码来源:socklnd_lib-darwin.c
注:本文中的sock_setsockopt函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论