(ql: Qiling, sockfd: int, level: int, optname: int, optval_addr: int, optlen: int)
| 341 | |
| 342 | |
| 343 | def ql_syscall_setsockopt(ql: Qiling, sockfd: int, level: int, optname: int, optval_addr: int, optlen: int): |
| 344 | sock = get_opened_socket(ql.os, sockfd) |
| 345 | |
| 346 | if isinstance(sock, int): |
| 347 | return sock |
| 348 | |
| 349 | if optval_addr == 0: |
| 350 | sock.setsockopt(level, optname, None, optlen) |
| 351 | |
| 352 | else: |
| 353 | vsock_level = level |
| 354 | hsock_level = __host_socket_level(vsock_level, ql.arch.type) |
| 355 | |
| 356 | ql.log.debug(f'Converted emulated socket level {vsock_level} to host socket level {hsock_level}') |
| 357 | |
| 358 | vsock_opt = optname |
| 359 | hsock_opt = __host_socket_option(vsock_level, vsock_opt, ql.arch.type, ql.os.type) |
| 360 | |
| 361 | ql.log.debug(f'Converted emulated socket option {vsock_opt} to host socket option {hsock_opt}') |
| 362 | |
| 363 | optval = ql.mem.read(optval_addr, optlen) |
| 364 | |
| 365 | try: |
| 366 | sock.setsockopt(hsock_level, hsock_opt, optval) |
| 367 | except (ConnectionError, OSError) as ex: |
| 368 | return -ex.errno |
| 369 | |
| 370 | return 0 |
| 371 | |
| 372 | |
| 373 | def ql_syscall_shutdown(ql: Qiling, sockfd: int, how: int): |
nothing calls this directly
no test coverage detected