Changeset 1186:56c36d1007b4 in freeDiameter for libfdcore/sctp.c
- Timestamp:
- Jun 7, 2013, 7:48:34 PM (11 years ago)
- Branch:
- default
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
libfdcore/sctp.c
r1175 r1186 1080 1080 } 1081 1081 1082 /* Send a buffer over a specified stream */1083 int fd_sctp_sendstr(struct cnxctx * conn, uint16_t strid, uint8_t * buf, size_t len)1082 /* Send a vector over a specified stream */ 1083 ssize_t fd_sctp_sendstrv(struct cnxctx * conn, uint16_t strid, const struct iovec *iov, int iovcnt) 1084 1084 { 1085 1085 struct msghdr mhdr; 1086 struct iovec iov;1087 1086 struct cmsghdr *hdr; 1088 1087 #ifdef OLD_SCTP_SOCKET_API … … 1096 1095 int timedout = 0; 1097 1096 1098 TRACE_ENTRY("%p %hu %p % zd", conn, strid, buf, len);1099 CHECK_PARAMS (conn && buf && len);1097 TRACE_ENTRY("%p %hu %p %d", conn, strid, iov, iovcnt); 1098 CHECK_PARAMS_DO(conn && iov && iovcnt, { errno = EINVAL; return -1; } ); 1100 1099 1101 1100 memset(&mhdr, 0, sizeof(mhdr)); 1102 memset(&iov, 0, sizeof(iov));1103 1101 memset(&anci, 0, sizeof(anci)); 1104 1105 /* IO Vector: message data */1106 iov.iov_base = buf;1107 iov.iov_len = len;1108 1102 1109 1103 /* Anciliary data: specify SCTP stream */ … … 1124 1118 /* We don't use mhdr.msg_name here; it could be used to specify an address different from the primary */ 1125 1119 1126 mhdr.msg_iov = &iov;1127 mhdr.msg_iovlen = 1;1120 mhdr.msg_iov = (struct iovec *)iov; 1121 mhdr.msg_iovlen = iovcnt; 1128 1122 1129 1123 mhdr.msg_control = anci; 1130 1124 mhdr.msg_controllen = sizeof(anci); 1131 1125 1132 TRACE_DEBUG(FULL, "Sending % zdb data on stream %hu of socket %d",len, strid, conn->cc_socket);1126 TRACE_DEBUG(FULL, "Sending %d chunks of data (first:%zdb) on stream %hu of socket %d", iovcnt, iov[0].iov_len, strid, conn->cc_socket); 1133 1127 again: 1134 1128 ret = sendmsg(conn->cc_socket, &mhdr, 0); … … 1144 1138 } 1145 1139 1146 CHECK_SYS( ret ); 1147 ASSERT( ret == len ); /* There should not be partial delivery with sendmsg... */ 1148 1149 return 0; 1140 CHECK_SYS_DO( ret, ); /* for tracing error only */ 1141 1142 return ret; 1150 1143 } 1151 1144
Note: See TracChangeset
for help on using the changeset viewer.