Skip to content

fix: fix address already use#634

Merged
Stream29 merged 1 commit intolanggenius:mainfrom
fatelei:issue-633
Mar 16, 2026
Merged

fix: fix address already use#634
Stream29 merged 1 commit intolanggenius:mainfrom
fatelei:issue-633

Conversation

@fatelei
Copy link
Contributor

@fatelei fatelei commented Mar 16, 2026

Description

fix #633

use

gnet.WithReuseAddr(true) and gnet.WithReusePort(true)

Type of Change

  • Bug fix
  • New feature
  • Refactor
  • Performance improvement
  • Other

Essential Checklist

Testing

  • I have tested the changes locally and confirmed they work as expected
  • I have added unit tests where necessary and they pass successfully

Bug Fix (if applicable)

  • I have used GitHub syntax to close the related issue (e.g., Fixes #123 or Closes #123)

Additional Information

Please provide any additional context that would help reviewers understand the changes.

@dosubot dosubot bot added the size:L This PR changes 100-499 lines, ignoring generated files. label Mar 16, 2026
@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request significantly improves the robustness and reliability of the plugin server by addressing common port binding issues and enhancing its shutdown procedures. It ensures that the server can restart quickly after a crash and handles graceful termination more effectively, leading to a more stable and resilient application.

Highlights

  • Port Reuse Implementation: Implemented gnet.WithReuseAddr(true) and gnet.WithReusePort(true) options for the gnet server to resolve "address already in use" errors, specifically addressing issue address already in use #633.
  • Server Launch Retry Mechanism: Introduced a retry mechanism for server launch attempts, allowing the server to eventually bind to a port even if it's temporarily in a TIME_WAIT state after a crash.
  • Enhanced Graceful Shutdown: Enhanced the server's Stop method to perform a graceful shutdown with a 5-second timeout, improving resource release and adding SIGQUIT to handled signals.
  • Comprehensive Unit Tests: Added a suite of new unit tests to validate the server's graceful shutdown, port reuse capabilities, concurrent stop operations, and retry logic during launch.

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

Changelog
  • internal/core/debugging_runtime/server.go
    • Imported the time package for timeout functionality.
    • Modified the Stop method to include a nil server check, use a context with a 5-second timeout for graceful shutdown, and return a formatted error on failure.
    • Updated the Launch method to incorporate gnet.WithReuseAddr(true) and gnet.WithReusePort(true) options.
    • Added a retry loop with exponential backoff for server launch attempts to handle temporary port unavailability.
    • Expanded collectShutdownSignal to listen for syscall.SIGQUIT and print informative messages during shutdown.
  • internal/core/debugging_runtime/server_test.go
    • Imported the sync package for concurrent testing.
    • Added TestServerStopWithNilServer to verify Stop handles nil server instances.
    • Introduced TestServerGracefulShutdown to confirm the server stops listening after a graceful shutdown.
    • Created TestServerStopMultipleTimes to ensure multiple Stop calls do not cause errors.
    • Implemented TestServerQuickRestart to validate SO_REUSEADDR and SO_REUSEPORT by restarting a server on the same port immediately.
    • Added TestServerStopConcurrent to check the thread-safety of concurrent Stop calls.
    • Included TestServerLaunchWithRetry to test the server's ability to launch after a temporary port conflict is resolved.
Activity
  • No specific activity (comments, reviews, progress updates) has been recorded for this pull request yet.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

@dosubot dosubot bot added bug Something isn't working go Pull requests that update go code plugin-daemon labels Mar 16, 2026
Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces valuable improvements for server stability and robustness, including graceful shutdown with a timeout, a retry mechanism for server launch to handle 'address already in use' errors, and comprehensive tests for the new functionality. My feedback focuses on improving logging consistency by using a structured logger instead of fmt.Printf, ensuring code style consistency for receiver names, and enhancing the reliability of a new test case.

@fatelei fatelei force-pushed the issue-633 branch 2 times, most recently from d3ee0b5 to c52773a Compare March 16, 2026 11:16
@dosubot dosubot bot added the lgtm This PR has been approved by a maintainer label Mar 16, 2026
@Stream29 Stream29 merged commit 8499125 into langgenius:main Mar 16, 2026
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working go Pull requests that update go code lgtm This PR has been approved by a maintainer plugin-daemon size:L This PR changes 100-499 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

address already in use

2 participants