mirror of
https://github.com/Waujito/youtubeUnblock.git
synced 2025-12-31 21:58:51 +03:00
Fix youtubeUnblock freeze when more than queue_size packets being sent
as fake_sni_seq_len The problem affects both the userspace version and kernel space one. The problem was reported in #166 and hopefully #167 also relates to it. The problem occures because each packet sent by rawsocket is being enqueued in the nf_queue, but each rawsocket waits for the packet to be processed by linux kernel network stack. This leads to the infinitily waiting rawsocket when the queue fullfills.
This commit is contained in:
@@ -80,7 +80,7 @@ static int send_raw_ipv4(const uint8_t *pkt, uint32_t pktlen) {
|
|||||||
iov.iov_base = (__u8 *)pkt;
|
iov.iov_base = (__u8 *)pkt;
|
||||||
iov.iov_len = pktlen;
|
iov.iov_len = pktlen;
|
||||||
|
|
||||||
msg.msg_flags = 0;
|
msg.msg_flags = MSG_DONTWAIT;
|
||||||
msg.msg_name = &daddr;
|
msg.msg_name = &daddr;
|
||||||
msg.msg_namelen = sizeof(struct sockaddr_in);
|
msg.msg_namelen = sizeof(struct sockaddr_in);
|
||||||
msg.msg_control = NULL;
|
msg.msg_control = NULL;
|
||||||
@@ -140,7 +140,7 @@ static int send_raw_ipv6(const uint8_t *pkt, uint32_t pktlen) {
|
|||||||
iov.iov_base = (__u8 *)pkt;
|
iov.iov_base = (__u8 *)pkt;
|
||||||
iov.iov_len = pktlen;
|
iov.iov_len = pktlen;
|
||||||
|
|
||||||
msg.msg_flags = 0;
|
msg.msg_flags = MSG_DONTWAIT;
|
||||||
msg.msg_name = &daddr;
|
msg.msg_name = &daddr;
|
||||||
msg.msg_namelen = sizeof(struct sockaddr_in6);
|
msg.msg_namelen = sizeof(struct sockaddr_in6);
|
||||||
msg.msg_control = NULL;
|
msg.msg_control = NULL;
|
||||||
|
|||||||
@@ -203,7 +203,7 @@ static int send_raw_ipv4(const uint8_t *pkt, uint32_t pktlen) {
|
|||||||
pthread_mutex_lock(&rawsocket_lock);
|
pthread_mutex_lock(&rawsocket_lock);
|
||||||
|
|
||||||
int sent = sendto(rawsocket,
|
int sent = sendto(rawsocket,
|
||||||
pkt, pktlen, 0,
|
pkt, pktlen, MSG_DONTWAIT,
|
||||||
(struct sockaddr *)&daddr, sizeof(daddr));
|
(struct sockaddr *)&daddr, sizeof(daddr));
|
||||||
|
|
||||||
if (config.threads != 1)
|
if (config.threads != 1)
|
||||||
@@ -238,7 +238,7 @@ static int send_raw_ipv6(const uint8_t *pkt, uint32_t pktlen) {
|
|||||||
pthread_mutex_lock(&rawsocket_lock);
|
pthread_mutex_lock(&rawsocket_lock);
|
||||||
|
|
||||||
int sent = sendto(raw6socket,
|
int sent = sendto(raw6socket,
|
||||||
pkt, pktlen, 0,
|
pkt, pktlen, MSG_DONTWAIT,
|
||||||
(struct sockaddr *)&daddr, sizeof(daddr));
|
(struct sockaddr *)&daddr, sizeof(daddr));
|
||||||
|
|
||||||
lgtrace_addp("rawsocket sent %d", sent);
|
lgtrace_addp("rawsocket sent %d", sent);
|
||||||
|
|||||||
Reference in New Issue
Block a user