Page 1 of 1

socket_process_end

Posted: Thu Sep 15, 2022 3:59 am
by Kreoton
В процессе портирования сетевой подсистемы в Miraculix OS, возникло пару вопросов.

Почему не используется процедура закрытия сокетов, при завершении процесса - socket_process_end?

Кроме того, обратил внимание, что поиск номера свободного сокета в socket_alloc, идет не с начала, а начиная с последнего.

Re: socket_process_end

Posted: Thu Sep 15, 2022 8:45 am
by turbocat
Кста почему исходики ОС закрыты? А ещё я не пойму какая лицензия у проекта.

Re: socket_process_end

Posted: Thu Sep 15, 2022 9:09 am
by Kreoton
Буду открывать по мере готовности. На данный момент открыл исходники новых программ на С (ipconfig, ping, taskmgr, wget, http-server), mx32.asm (ring3 API), и исходный код ядра kernel.asm

Выложил на свой сайт и на github

На счет лицензии еще подумаю.

Re: socket_process_end

Posted: Thu Sep 15, 2022 10:19 am
by turbocat
Касательно сетевого стека сказать не могу. Он не полностью реализован. Да и работает тоже не очень. Вы не думали портировать lwIP к себе?

Re: socket_process_end

Posted: Thu Sep 15, 2022 10:49 am
by Kreoton
Я подумал проще портировать стек из KolibriOS, т.к тоже на FASM'e. На счет lwIP надо подумать.. В принципе, его можно дорабатывть по мере необходимости. Критичный для меня функционал я уже доработал.
И считаю, что его уже достаточно для создания сетевых приложений, например - мессенджера.

А касательно работы стека да... глюков к сожалению много... например, если в Колибри используется драйвер PCNET32, 10 мин пинга и стек подвисает. В Miraculix я исправил этот баг, добавив в нужном месте в icmp.inc освобождение буфера.

Re: socket_process_end

Posted: Thu Sep 15, 2022 11:50 am
by turbocat
А вы можете кинуть нам патч пожалуйста)

Re: socket_process_end

Posted: Thu Sep 15, 2022 5:02 pm
by rgimad
Офигеть, кто вернулся! Миракуликс жив, нифига себе!! Спустя столько лет

Re: socket_process_end

Posted: Fri Sep 16, 2022 12:36 am
by Kreoton
turbocat wrote: Thu Sep 15, 2022 11:50 am А вы можете кинуть нам патч пожалуйста)
Изменить в socket.inc, для того, чтобы отсчет пошел сначала.

Code: Select all

; в socket_alloc
mov     edi, [last_socket_num]  
; заменить на
mov     edi, 0
Закрытие сокетов при завершении процесса:

Code: Select all


;
;  Добавил в stack_init пепехват завершения процесса или потока. Таким же способом будут закрываться файлы и соединения Bluetooth.
;
	mov	eax, socket_process_end
	call	[HookTaskKill]
	

; добавить в socket.inc

; IN  : EDX - Closing PID
socket_process_end:
	pusha
	pushf
	cli
  .socket_close_PID_start:
        mov     ebx, net_sockets
  .next_socket:
        mov     ebx, [ebx + SOCKET.NextPtr]
        cmp     ebx, 0
        je      .last_socket

        cmp     [ebx + SOCKET.PID],edx
	je	.close_socket_handle_of_PID
        cmp     [ebx + SOCKET.TID],edx
	je	.close_socket_handle_of_PID
        jmp     .next_socket
  .close_socket_handle_of_PID:
	pusha
	mov	ecx,[ebx + SOCKET.Number]
	call	socket_close
	popa
        jmp     .socket_close_PID_start
  .last_socket:
	popf
	popa
	ret


Re: socket_process_end

Posted: Sun Sep 10, 2023 3:40 pm
by Leency
И что? И всё?

Re: socket_process_end

Posted: Tue Sep 12, 2023 11:30 pm
by hidnplayr
The function was disabled because it resulted in deadlock under certain circumstances and whole design should be re-evaluated.
It could be that the proposed solution reduces the frequency, but I don't understand how it can resolve the issue completely.