全部博文(97)
分类: LINUX
2012-10-16 16:57:04
{
struct inet_opt *inet = inet_sk(sk); // 将sk强制转化成struct inet_sock类型
int ulen = len;
struct ipcm_cookie ipc;
struct rtable *rt = NULL;
int free = 0;
int connected = 0;
u32 daddr, faddr, saddr;
u16 dport;int err;
//cork传递给ip_append_data,用于指出是否应该使用缓冲区机制。
//msg_flags其值即为传入的参数flags。
// MSG_MORE标志表明还将发送更多的参数
int corkreq = up->corkflag || msg->msg_flags&MSG_MORE;//检查产度是否超过最大地址长度
if (len > 0xFFFF)return -EMSGSIZE;
// MSG_OOB用来接受外带数据
ipc.opt = NULL;
//判断是否有数据需要发送。 如果该socket有等待发送的数据,那么直接将数据追加。如果没有就ulen加上udp首部的长度。
if (up->pending) {
//调用lock_sock函数锁定该套接字
lock_sock(sk);}
goto do_append_data;}
release_sock(sk);}
//ulen加上udp首部的长度。
if (msg->msg_name) {
struct sockaddr_in * usin = (struct sockaddr_in*)msg->msg_name;if (msg->msg_namelen < sizeof(*usin))
return -EINVAL;
//因为这是udp_sendmsg函数,当然使用TCP/IP协议,所以判断协议是否为AF_INET协议族,如果不是,继续判断是否为AF_UNSPEC,如果不是,则返回不可用的地址
if (usin->sin_family != AF_INET) { daddr = usin->sin_addr.s_addr;
} else {
//即使目的地址为空,但如果套接字处于连接状态,则仍然认为目的地址合法,允许继续传送数据
if (sk->sk_state != TCP_ESTABLISHED)return -EDESTADDRREQ;
daddr = inet->daddr;
dport = inet->dport;}
ipc.addr = inet->saddr;
ipc.oif = sk->sk_bound_dev_if;
//如果是控制报文,通过ip_cmsg_send处理控制报文
return err;
if (ipc.opt)
tos = RT_TOS(inet->tos);
//确定是否需要路由信息
if (sk->sk_localroute || (msg->msg_flags & MSG_DONTROUTE) ||}
//如果已经建立了套接字连接,则不需要重新查询路由
//直接从套接字的管理结构中返回路由表信息 ,并记录到rt 中
if (connected)up->len = ulen;
//对UDP数据包进行分片处理,为IP层分片处理做好准备
err = ip_append_data(sk, ip_generic_getfrag, msg->msg_iov, ulen,udp_flush_pending_frames(sk);
//上层应用指定flags为MSG_MORE时,corkreq为1
else if (!corkreq)最大行业软件2012-11-03 14:47:11
ISOGRAPH_AVSIM_V10.0
ADINA系列产品:
ADINA.V8.8.1
CROCODILE.TECHNOLOGY.V609 系统控制仿真软件
Esteco.modeFRONTiER.v4.3.0 20101110 优化设计
ETA系列:
ETA.CAD.Translator.v1.200704
ETA.VPG.v3.3 汽车整车仿真软件
ETA_DYNAFORM_V5.6(多语言版,包括中文)
(DYNAFORM 是ETA开发的用于板料成形模拟的软件包。针对板料冲压的工艺特点,开发了方便高效的前后处理器,极大地缩短
了模型准备的周期。求解器采用LS-DYNA,基于增量法有限元理论,分析结果准确可靠。DYNAFORM可以模拟预压边、拉延、翻
边、弯曲、多工步成形等工艺过程,能够预测板料起皱、拉裂、回