| 1295 | } |
| 1296 | |
| 1297 | int at_setsockopt(int socket, int level, int optname, const void *optval, socklen_t optlen) |
| 1298 | { |
| 1299 | struct at_socket *sock; |
| 1300 | |
| 1301 | if (optval == RT_NULL) |
| 1302 | { |
| 1303 | LOG_E("AT setsockopt input option value error!"); |
| 1304 | rt_set_errno(EFAULT); |
| 1305 | return -1; |
| 1306 | } |
| 1307 | |
| 1308 | sock = at_get_socket(socket); |
| 1309 | if (sock == RT_NULL) |
| 1310 | { |
| 1311 | rt_set_errno(ENXIO); |
| 1312 | return -1; |
| 1313 | } |
| 1314 | |
| 1315 | switch (level) |
| 1316 | { |
| 1317 | case SOL_SOCKET: |
| 1318 | switch (optname) |
| 1319 | { |
| 1320 | case SO_RCVTIMEO: |
| 1321 | sock->recv_timeout = ((const struct timeval *) optval)->tv_sec * 1000 |
| 1322 | + ((const struct timeval *) optval)->tv_usec / 1000; |
| 1323 | break; |
| 1324 | |
| 1325 | case SO_SNDTIMEO: |
| 1326 | sock->send_timeout = ((const struct timeval *) optval)->tv_sec * 1000 |
| 1327 | + ((const struct timeval *) optval)->tv_usec / 1000; |
| 1328 | break; |
| 1329 | |
| 1330 | default: |
| 1331 | LOG_E("AT socket (%d) not support option name : %d.", socket, optname); |
| 1332 | rt_set_errno(EPERM); |
| 1333 | return -1; |
| 1334 | } |
| 1335 | break; |
| 1336 | case IPPROTO_TCP: |
| 1337 | switch (optname) |
| 1338 | { |
| 1339 | case TCP_NODELAY: |
| 1340 | break; |
| 1341 | } |
| 1342 | break; |
| 1343 | default: |
| 1344 | LOG_E("AT socket (%d) not support option level : %d.", socket, level); |
| 1345 | rt_set_errno(EPERM); |
| 1346 | return -1; |
| 1347 | } |
| 1348 | |
| 1349 | return 0; |
| 1350 | } |
| 1351 | |
| 1352 | static uint32_t ipstr_atol(const char* nptr) |
| 1353 | { |
nothing calls this directly
no test coverage detected